2008-08-12 41 views
4

我有這個長期問題不完全理解如何實現體面的Lucene排序或排名。假設我有一份城市及其人口的列表。如果有人搜索「新的」或「倫敦」,我想要按照人口排列的前綴匹配列表,我有一個前綴搜索和按字段排序的字段,其中有一個人口字段,IE新墨西哥州,紐約;或倫敦德里的倫敦。Lucene確切訂購

但是我總是希望確切的匹配名稱位於頂部。因此,就「倫敦」而言,即使倫敦德里的人口多於倫敦的CT,倫敦,倫敦,倫敦德里的倫敦德里的第一個倫敦在英國,第二個倫敦在康涅狄格。

有沒有人有單一的查詢解決方案?

回答

3

dlamblin,讓我看看我是否正確地得到這個結果:你想做一個基於前綴的查詢,然後按照總體對結果進行排序,也許把排序順序和偏好結合到一起。 我建議你從排序中分離搜索,並使用CustomSorter進行排序: Here's a blog entry describing a custom sorterThe classic Lucene book描述了這一點。

+0

謝謝您的博客文章,解釋瞭如何實現一種比較方便的是不需要定義2班。但是,由於排序比較器只能在兩個文檔中工作而不知道搜索詞,因此無法對結果進行排序,因爲我在我的問題中描述了它們。如果排序比較器不能訪問搜索詞,那麼排序比較器如何知道名稱字段「london」與搜索詞「london」完全匹配? – dlamblin 2009-09-03 00:32:41

0

我目前的解決方案是創建一個精確的搜索器和前綴搜索器,這兩個搜索器都按逆向羣體排序,然後將所有搜索結果從精確匹配中複製出來,移至前綴匹配。它使我的結果分頁比我認爲應該更令人討厭。

此外,我用一個散列來消除重複,但後來更改前綴搜索器到一個前綴搜索的布爾查詢(MUST)與精確搜索(MUST NOT),以使Lucene刪除重複。雖然這看起來更浪費。

編輯:移動到評論(因爲功能現在存在):Yuval F謝謝您的博客帖子......那種比較怎麼知道這個名字字段「倫敦」的檢索詞完全匹配「倫敦「如果它無法訪問搜索字詞?

1

API爲

Sortcomparator

有一個明顯可比在現場每一個獨特的名詞 - 如果 一些文件在同一期限 該字段,緩存陣列將有 entri ES其中引用相同的 可比

您可以將

FieldSortedHitQueue

到具有比較字段該API稱sortcomparator ...

存儲比較器cor每個字段按 排序。

因此,這個詞可相應地進行排序