2014-07-25 71 views
0

我想將我的lucene從3.0升級到4.9。我根據國家編寫了一個自定義排序,只需查看該國是否與查詢相同,然後是文件大陸與該大陸的距離與查詢要查找的距離有多大。Lucene按國家排序

這不是一個過濾器 - 我想要所有的結果,只是按國家排序。

例如 - 我正在尋找鞋店,我在美國。

所以所有在美國的鞋店將是第一,其次是加拿大,墨西哥,英國,俄羅斯& c。

我的自定義排序不編譯,我找不到任何如何在lucene 4.X中編寫自定義排序的示例。

我看了一下地理空間搜索,但也似乎先過濾,然後排序。

任何人都可以幫我一個自定義排序爲lucene 4.X的例子嗎?

回答

2

也許,這個問題最好被看作是一個評分問題,而不是排序問題。這樣,問題就變成了:如何使用國家之間的距離(而不是df/idf指標)對文檔進行評分。一旦他們得分正確,默認的排序方法將是合適的。

基本上,有必要擴展CustomScoreQueryCustomScoreProvider類。

此博客文章(Lucene Custom Scoring)顯示了擴展的示例。

爲了更確切的一點,我的建議是:

1加「的距離知識」你的延伸CustomScoreProvider;

2-在覆蓋的customScore方法檢索文檔的國家;

3-計算文檔所在國家和查詢國家之間的距離(請記住通過CustomScoreQuery放置此信息);

4-返回你的分數:)

我希望這個策略適合你。

P.S.該博客文章與4.6版相關。爲了在版本4.9中正常工作,可能需要進行一些調整。

+0

謝謝。我實際上已經開始使用solr,只是用一個函數來完成它。這是一個簡單的,但完成工作: if(termfreq(country,$ country), - 1,abs(sub(field(continent),$ continent)))asc – user1139675