lucene によって作成されたインデックスがあり、その中の各ドキュメントには、そのうちの 1 つが私の頻度である数値フィールドであるという 3 つのフィールドがあります。インデックスを検索しますが、その前に数値フィールドで並べ替えたいと思います。検索する前に lucene で並べ替える方法はありますか?
質問する
1401 次
1 に答える
3
Lucene は一連のドキュメントを格納して検索するのではなく、逆検索用のインデックスを作成するため、検索前に並べ替えを行うことはあまり意味がありません。
ただし、検索を実行して、指定された方法で既に並べ替えられている結果を取得したいようです。
これは、次のように、SortをIndexSearcher.search呼び出しに渡すことによって行われます。
SortField field = new SortField("frequency", SortField.Type.FLOAT);
//Sorting, first, by "frequency", then by relevance score
Sort sort = new Sort(field, Sort.FIELD_SCORE);
searcher.search(query, maxDocs, sort);
フィールドの名前は、あなたが車輪を再発明しているのではないかと思います。Lucene はすでに、用語の頻度を関連性スコアに考慮しています。そのようなスコアリングを微調整したい場合は、カスタムSimilarity
クラスを作成してスコアを計算することをお勧めします。特に、TFIDFSimilarity
またはDefaultSimilarity
を拡張し、メソッドをオーバーライドしますtf
。
于 2013-06-18T15:42:02.817 に答える