Ich habe ein Problem mit der Score-Berechnung mit einer PrefixQuery. Um das Ergebnis jedes Dokuments zu ändern, habe ich beim Hinzufügen eines Dokuments in den Index setBoost verwendet, um den Boost des Dokuments zu ändern. Dann erstelle ich PrefixQuery für die Suche, aber das Ergebnis wurde nicht entsprechend dem Boost geändert. Es scheint, dass setBoost bei einer PrefixQuery nicht funktioniert. Bitte überprüfen Sie meinen Code unten:Lucene: Score-Berechnung mit einer PrefixQuery
@Test
public void testNormsDocBoost() throws Exception {
Directory dir = new RAMDirectory();
IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(Version.LUCENE_CURRENT), true,
IndexWriter.MaxFieldLength.LIMITED);
Document doc1 = new Document();
Field f1 = new Field("contents", "common1", Field.Store.YES, Field.Index.ANALYZED);
doc1.add(f1);
doc1.setBoost(100);
writer.addDocument(doc1);
Document doc2 = new Document();
Field f2 = new Field("contents", "common2", Field.Store.YES, Field.Index.ANALYZED);
doc2.add(f2);
doc2.setBoost(200);
writer.addDocument(doc2);
Document doc3 = new Document();
Field f3 = new Field("contents", "common3", Field.Store.YES, Field.Index.ANALYZED);
doc3.add(f3);
doc3.setBoost(300);
writer.addDocument(doc3);
writer.close();
IndexReader reader = IndexReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader);
TopDocs docs = searcher.search(new PrefixQuery(new Term("contents", "common")), 10);
for (ScoreDoc doc : docs.scoreDocs) {
System.out.println("docid : " + doc.doc + " score : " + doc.score + " "
+ searcher.doc(doc.doc).get("contents"));
}
}
Die Ausgabe lautet:
docid : 0 score : 1.0 common1
docid : 1 score : 1.0 common2
docid : 2 score : 1.0 common3
Beachten Sie, dass dies auch bei Verwendung von setBoost in einer Feldebene zu gelten scheint. d. h. PrefixQuery scheint die Feldverstärkungen zu ignorieren, es sei denn, Sie ändern das Umschreibverfahren wie hier beschrieben. –
das hat mir geholfen, bitte als Antwort markieren. – fommil