I finally managed to get spatial searching working in combination with
dismax so I'm sending this should anyone else have the same problem.
I gave up using localsolr in the end - one of the resultsets of the two
it returned was correct (dismax+spatial) but I don't trust this enough
to depend upon it, don't want the surplus data and want to be able to
sort by distance.
In the end I switched to using the spatial solr module. On my setup the
default search is a dismax and the basedOn parameter for the spatial
query parser is set to dismax. If you search without the spatial
criteria it gives a dismax search as expected however when I try to use
a spatial criteria it reverts to using a normal search despite the
settings - much the same as with localsolr.
I seem to however have a working solution, albeit a not particularly
pretty one, using filter queries -
<lst name="params">
<str name="q">term</str>
<str name="fq">{!spatial lat=50 long=-3 radius=100}*:*</str>
</lst>
However this does not allow you to sort against distance - presumably
the filter is applied after the sort, instead I managed to get this
working by swapping the two around and explicitly telling the filter to
use dismax.
<lst name="params">
<str name="sort">distance asc</str>
<str name="q">{!spatial lat=50 long=-3 radius=100}*:*</str>
<str name="fq">{!dismax}term</str>
</lst>
I don't know if this is suboptimal as the spatial search will likely be
more expensive than the dismax (i think) but using the 20,000 odd
records I'm testing with this is still ninja-quick. I'm going to up the
dataset to a couple of million records and see if it is still acceptably
fast.
Anyway, does anyone know if there is something I could be doing wrong
that is causing dismax to not play nice with the two spatial searching
methods, or is this one for the JIRA?
Luke
Luke Tebbs wrote:
Thanks Dan,
That seems to have moved things forwards, however if I do this I get
two <result> sets, presumably one from localsolr and one from dismax.
e.g -
<response>
<responseHeader>
<status>0</status>
<QTime>116</QTime>
</responseHeader>
<result name="response" numFound="358" start="0">
...
</result>
<result name="response" numFound="8207" start="0">
...
</result>
</response>
Also it seems to explode with a NullPointerException if I dare to try
and sort by distance -
INFO: [testCore] webapp=/solr path=/select
params={sort=geo_distance+asc&q=some+phrase&radius=30&long=-0.1262362&qt=geo&wt=javabin&lat=51.5001524&rows=0&version=1}
status=500 QTime=123
02-Sep-2010 16:44:50 org.apache.solr.common.SolrException log
SEVERE: java.lang.NullPointerException
at
org.apache.lucene.spatial.tier.DistanceFieldComparatorSource$DistanceScoreDocLookupComparator.copy(DistanceFieldComparatorSource.java:105)
at
org.apache.lucene.search.TopFieldCollector$OneComparatorNonScoringCollector.collect(TopFieldCollector.java:84)
at
org.apache.lucene.search.BooleanScorer2.score(BooleanScorer2.java:292)
....
I don't know if these are related - perhaps it's trying to compare
against the dismax records that don't have a geo_distance?
Did you get anything like this?
Luke
dan whelan wrote:
I experienced the same issue. The localsolr site says to configure
like this:
<arr name="components">
<str>localsolr</str>
<str>facet</str>
<str>mlt</str>
<str>highlight</str>
<str>debug</str>
</arr>
but the default solr components are (note the above config is missing
query):
query
facet
mlt
highlight
stats
debug
I fixed it by doing this instead
<arr name="first-components">
<str>localsolr</str>
</arr>
On 9/2/10 4:15 AM, Luke Tebbs wrote:
Anyone?
I'm really lost as to what to do here... if anyone has any
experience with this
or even ideas of things to try I'd really appreciate your input.
It seems like what I'm trying to do should work but for some reason
'defType' seems to be
ignored....
Thankyou
Luke
-------- Original Message -------
Does anyone have any experience with getting dismax to work with a
geospatial (localsolr) search?
I have the following configuration -
....
<requestHandler name="standard" class="solr.SearchHandler"
default="true">
<lst name="defaults">
<str name="defType">dismax</str>
<str name="qf">title description^0.5</str>
<str name="pf">title description^0.5</str>
<str name="mm">0%</str>
<str name="tie">0.1</str>
</lst>
</requestHandler>
<requestHandler name="geo" class="solr.SearchHandler">
<lst name="defaults">
<str name="defType">dismax</str>
<str name="qf">title description^0.5</str>
<str name="pf">title description^0.5</str>
<str name="mm">0%</str>
<str name="tie">0.1</str>
</lst>
<arr name="components">
<str>localsolr</str> <str>facet</str>
<str>mlt</str>
<str>highlight</str>
<str>debug</str>
</arr>
</requestHandler>
....
All of the location searching works fine, as does the normal search,
but when using the "geo" handler the textual search seems to be
using the standard search handler and only the title field is searched.
I'm a bit stumped on this one, any help would be greatly appreciated.
Luke