質問

私は、適切な Lucene の並べ替えやランキングの実装方法がよくわからないという、長期的な問題を抱えていました。都市とその人口のリストがあるとします。誰かが「new」または「london」を検索した場合、人口順に並べられた前方一致のリストが必要です。人口フィールドがある場合、前方一致検索とフィールドによる並べ替えを逆にして作業します。IE ニューメキシコ、ニューヨーク;またはロンドン、ロンドンデリー。

ただし、完全に一致する名前が常に先頭に表示されるようにしたいと考えています。したがって、「ロンドン」の場合、ロンドンデリーの人口がロンドン コネチカット州よりも多い場合でも、リストには「ロンドン、ロンドン、ロンドンデリー」と表示される必要があります。最初のロンドンは英国にあり、2 番目のロンドンはコネチカット州にあります。

単一のクエリ ソリューションを持っている人はいますか?

役に立ちましたか?

解決

dlamblin、これが正しく理解できるかどうか見てみましょう:プレフィックスベースのクエリを作成し、その結果を母集団ごとに並べ替え、場合によっては完全一致を優先する並べ替え順序を組み合わせたいと考えています。検索を並べ替えから分離し、並べ替えには CustomSorter を使用することをお勧めします。こちらです カスタムソーターについて説明したブログエントリ. 古典的な Lucene 本 はこれをよく説明しています。

他のヒント

のAPI

ソートコンパレータ

言う

フィールド内の一意の用語ごとに異なる同等のものがあります - 一部のドキュメントがフィールドで同じ用語を持っている場合、キャッシュアレイには同じ匹敵を参照するエントリがあります

適用できるのは、

フィールドソート済みヒットキュー

API が言う Comparator フィールドを持つ sortcomparator に...

ソートされている各フィールドに対応するコンパレータを保存します。

したがって、用語はそれに応じて並べ替えることができます

私の現在の解決策は、完全一致検索と接頭辞検索を作成し、どちらも逆母集団でソートし、完全一致ヒットから開始して接頭辞ヒットまですべてのヒットをコピーすることです。そのため、結果のページングが私が思っているよりも少し煩わしくなります。

また、重複を排除するためにハッシュを使用しましたが、後でプレフィックス サーチャーを完全一致検索 (MUST NOT) を伴うプレフィックス検索 (MUST) のブール クエリに変更して、Lucene に重複を削除させました。これはさらに無駄に思えましたが。

編集:コメントに移動しました (この機能は現在存在しているため): ユヴァル・F ブログ投稿ありがとうございます...検索語にアクセスできない場合、並べ替えコンパレータは名前フィールド「london」が検索語「london」と正確に一致することをどのようにして知るのでしょうか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top