Lucene 5.3を使用してドキュメントのインデックスを作成し、BooleanQuery
を使用します。ここでは、クエリ内の各用語がいくつかのスコアで追加されます。なぜluceneはインデックス内のすべてのドキュメントを返さないのですか?
私の問題は、私がインデックスを検索するときに、私のインデックスにあるヒット数よりも少ない数のドキュメントを取得することです。
System.out.println("docs in the index = " + reader.numDocs());
//e.g., docs in the index = 92
TopDocs topDocs = indexSearcher.search(q, reader.numDocs()); //this ensures no result is omitted from the search.
ScoreDoc[] hits = topDocs.scoreDocs;
System.out.println("results found: " + topDocs.totalHits)
//e.g., results found: 44
この動作の理由は何ですか? luceneはスコアが0の文書を無視しますか?
スコアに関係なく、インデックス内のすべてのドキュメントを取得するにはどうすればよいですか?
このクエリは、インデックス内のすべてのドキュメントに一致すると思われますか?または、クエリに一致するかどうかにかかわらずすべてのドキュメントを返すようにしますか? – femtoRgon
すべての書類を返送したい。次に、スコアに基づいてランク付けし、不一致の文書が最下位になるようにします。 – KillBill
@KillBill IndexSearcher :: searchのコードを見ると、maxScoreに基づいてドキュメントを返さない可能性があります。新しいTopDocs(totalHits、scoreDocs、maxScore)を返します。だから私はTopDocsのsearchAfter(ScoreDocの後に、クエリクエリ、int n)を使用します。 –