2013-10-08 42 views
1

僅使用位置進行Bbox搜索會返回準確的數據;但如果我們添加更多的搜索參數,返回的距離分值獲取錯誤車道Solr - 如何按地理空間距離排序並返回距離?

對於EG-

案例1:

http://devtsg.truckertools.com/solr-4.4.0/collection1/select?wt=json&rows=1&fl=*,score&sort=score asc&q={!bbox score=distance sfield=geo pt=33.3232,-83.383 d=150}

- 它返回正確的距離爲store- 「得分」:0.02656421

案例2:

但是,如果我添加其他檢查,以B-盒,則返回錯誤距離得分

http://devtsg.truckertools.com/solr-4.4.0/collection1/select?wt=json&rows=1&fl=*,score&sort=score asc&q=({!bbox score=distance sfield=geo pt=33.3232,-83.383 d=150} AND :)

-the上面一個返回「分數」:0.7258905,這是不對的。它應該與上面的一樣。

情況下3:

只是爲了確保,已經添加了store-

http://devtsg.truckertools.com/solr-4.4.0/collection1/select?wt=json&rows=1&fl=*,score&sort=score asc&q=({!bbox score=distance sfield=geo pt=33.3232,-83.383 d=150} AND id:9220)

- 現在這其中也返回錯誤的距離 - 「分數的ID的檢查「:9.05333

我沒有得到什麼問題在這裏。 在此先感謝。

回答

1

將每個'AND'部分查詢放入Solr過濾器查詢('fq'參數)中,併爲關鍵字搜索相關性留下'q'。在你的字段列表('fl'param)中,你可以通過函數查詢返回距離:fl=*,dist:geodist()。像'pt'和'sfield'這樣的其他參數是必需的。要排序,請使用sort=geodist() asc

但是,在v4.5之前的Solr版本中,不能使用空間「RPT」字段的geodist()函數查詢。我看到你正在使用4.4。如果您需要在Solr 4.2到4.4中對RPT字段進行排序(只有在您有多個位置時才需要),那麼您必須以不同的方式處理這個問題,並且您的嘗試很接近。我建議你總是使用'​​q'和'fq'參數,因爲你通常應該使用它們(分別是關鍵字和過濾器)。考慮到我的查詢的這個echoParams輸出到Solr:

"indent":"true",  
    "wt":"json", 
    "sort":"query({!bbox v='' filter=false score=distance}) asc", 
    "fl":"*,score,dist:query({!bbox v='' filter=false score=distance})", 
    "sfield":"geo", 
    "pt":"33.3232,-83.383", 
    "d":"150", 
    "q":"*:*", 
    "fq":"{!bbox}", 
    "fq":"id:9220" 

是的,這是醜陋的。再次,從Solr 4.5開始,你不必再訴諸於此。

順便說一句,你看到的行爲實際上不是一個錯誤。你需要以不同的方式組合你的查詢來獲得你想要的結果。