lucene-solr-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Luke Tebbs <l...@staffing-systems.co.uk>
Subject Re: Localsolr with Dismax => workaround using spatial solr
Date Fri, 03 Sep 2010 15:02:41 GMT
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
>>>
>>
>


Mime
View raw message