King Friday
King Friday

Reputation: 26106

Solr 7 - How to do Full Text Search w/ Geo Spatial Search

How to do Full Text combined w/ Geo Spatial in Solr 7?

In regards to this: https://lucene.apache.org/solr/guide/7_2/spatial-search.html

I have to do queries that COMBINE full text w/ geo spatial. For example:

box AND full text or spatial sort AND full text.

I was not able to figure out a good query string example that produces this desired result. I would like this as a pure query string rather than some Java method as I'm consuming this on different tech other than Java. Solr is very deep and confusing and I know I must read more but there was no good examples for this anywhere online that I found.

desired query string example

[solr]/select?fq={!bbox sfield=point}&pt=34.04506799999999,-118.260849&d=10000&sort=geodist() asc&{!geofilt}&sfield=point&q=Panini

So in that case, would sort by distance yet also filter by some full text "some text" value.

If this cannot be done, I believe it is possible in Elastic Search but these (Solr and Elastic Search) are both built on top of Lucene so seems like it should work on both if works on one but feel free to supply an answer for Elastic Search as well.

example returned

{
  "responseHeader": {
    "status": 0,
    "QTime": 2,
    "params": {
        "q": "Panini",
        "pt": "34.04506799999999,-118.260849",
        "d": "10000",
        "{!geofilt}": "",
        "fq": "{!bbox sfield=point}",
        "sort": "geodist() asc",
        "sfield": "point"
    }
  },
  "response": {
    "numFound": 0,
    "start": 0,
    "docs": []
  }
}

Docs do contain this phrase 'Panini' but none returned. May be due to default way full text is handled in Solr 7? It is using the same point where the term 'Panini' is used and the field point is of type org.apache.solr.schema.PointType.

UPDATE

I ended up abandoning Solr for Elastic Search. Solr is just very annoying in its strange ways compared with the very easy to use Elastic Search. Things just work as you expect without having to dig into quirks.

Upvotes: 2

Views: 4964

Answers (2)

Rafal
Rafal

Reputation: 286

In your case, you have to combine the full-text search scoring with the spatial distance.

So if your query looks like this:

/select?fq={!bbox sfield=point}&pt=34.04506799999999,-118.260849&d=10000&sort=geodist() asc&{!geofilt}&sfield=point&q=Panini

You should change the sort parameter and either remove it or just set it to score desc. That way you sort by the score given from the full-text search query.

To take the spatial part into consideration you need to include a boosting function to your query. In majority of the cases - the closer the document is from the point of interest the better, so you would probably like to include a boosting function that does X/distance. The X can be as simple as 1 and the function itself can also be more complicated. To do that in dismax query you would use the bf parameter, like bf=div(1,geodist()).

Try that out, it should work, but of course will need some adjustments.

Upvotes: 2

Matthias M
Matthias M

Reputation: 14950

I adapted my answer to the solr 7.2.1 example:

Start solr by: ./bin/solr start -e techproducts

I've also visualized the data in google maps: https://www.google.com/maps/d/u/0/viewer?ll=42.00542239270033%2C-89.81213734375001&hl=en&hl=en&z=4&mid=16gaLvuWdE9TsnhcbK-BMu5DVYMzR9Vir

You need these query parameters:

Bound by Box Filter:

  • fq={!bbox}

The geo filter query parser bbox needs further parameters:

  • Solr field: sfield=store
  • Point to search/sort from: pt=36.35,-97.51
  • Distance for filter: d=1200

Sort:

  • sort=geodist() asc

Fulltext query:

  • q=some+text

Full example queries for solr example data:

Simple: http://localhost:8983/solr/techproducts/select?fq={!bbox}&sort=geodist()%20asc&sfield=store&pt=36.35,-97.51&d=1200&q=ipod&fl=name,store

UI: http://localhost:8983/solr/techproducts/browse?fq={!bbox}&sort=geodist()%20asc&sfield=store&pt=36.35,-97.51&d=1200&q=ipod

The result is as expected:

  1. Apple 60 GB iPod
  2. Belkin Power Cord for iPod
  3. Filtered by distance: iPod & iPod Mini USB 2.0 Cable

Hints

  • The field store must be of type location:
  • You might Urlencode the special characters: e.g. fq=%7B%21bbox%20sfield%3DgeoLocation%7D

Upvotes: 2

Related Questions