2012-03-28 46 views
1

我開始認爲我想要做的事情是不可能的,但我想我會試試這個。Solr使用dismax時計算距離

我正在運行Solr 3.5。

我目前有兩種類型的搜索:

  1. 它會返回在得分字段兩點之間的距離計算方法爲基本空間查詢。從我的Solr的日誌

示例查詢:

?fl=*,score&sort=score+asc&start=0&q={!func}geodist()&sfield=coordinates&pt=59.2363514,18.092783&version=2 
  1. 一個dismax查詢,允許對一些領域的自由文本查詢。從Solr的日誌

示例查詢:

mm=1&d=100.0&sfield=coordinates&qf=field1^5.0+fields2^3.0&defType=edismax&version=2&fl=*,score&start=1&q=monkeyhopper&pt=59.2363514,18.0927830000&fq={!geofilt}} 

我想用dismax查詢,以取代我第一次查詢,但我真的需要在響應中計算出的距離。是的,我可以通過編程的方式來計算距離,但我不希望Solr已經爲我做了這個。

我仍然希望能夠通過「相關性」,距離或任何其他字段對我的dismax查詢進行排序,因此我的提升給出的分數對於排序可能會很有趣,但我不需要將其返回。

回答

1

現在Solr 4+中可以使用僞字段,它允許您做到這一點。

http://localhost:8983/solr/collection1/browse?q=*:*&rows=1000&wt=xml&pt=37.763649,-122.24313&sfield=store&fl=dist:geodist() 

例如,此請求允許我返回一個字段「dist」,其中包含每個條目到指定點的距離。

+1

謝謝,鑑於Solr 4現在很穩定,我會接受這個解決方案:) – polythene 2013-08-13 16:53:35

2

如果我理解正確,您希望在Solr響應中獲得函數的結果。 SOLR-2444問題是你在找什麼我猜想:它允許在fl參數中包含僞字段,函數等。唯一的問題是它只在中繼上提交,所以它在當前Solr上不可用發佈,也不會在即將發佈的3.6版本中發佈。你必須等待第四次發佈,但我認爲這不會花費很多時間。也許你已經可以開始玩上一次成功的Jenkins構建的snapshot了。

+0

我一直在尋找Solr 4,它可能會解決我的問題。然而,如果這可以用3.5解決,那麼它會更好,因爲似乎還沒有Solr 4的發佈日期(儘管你可能是對的,現在可能不會那麼長) – polythene 2012-03-28 20:34:21

+0

我不認爲有一種開箱即用的方式來使用Solr 3.x完成所需的任務。也許你可以嘗試將SOLR-2444補丁應用到3x分支,但我不確定它會起作用。 – javanna 2012-03-29 08:18:14

+0

我傾向於以編程方式進行編程,直到4.0對生產足夠穩定。 – polythene 2012-04-02 10:58:28