Tengo un problema con el cálculo de puntaje con PrefixQuery. Para cambiar el puntaje de cada documento, cuando agrego el documento al índice, he usado setBoost para cambiar el impulso del documento. Luego creo PrefixQuery para buscar, pero el resultado no se ha modificado de acuerdo con el impulso. Parece que setBoost no funciona para PrefixQuery. Por favor, compruebe el código de abajo:Lucene: cálculo de puntaje con 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"));
}
}
La salida es:
docid : 0 score : 1.0 common1
docid : 1 score : 1.0 common2
docid : 2 score : 1.0 common3
Tenga en cuenta que esto también parece aplicarse cuando se usa setBoost en un nivel de campo. es decir, PrefixQuery parecerá ignorar los aumentos de campo a menos que cambie el método de reescritura como se describe aquí. –
esto me ayudó, por favor marque como la respuesta. – fommil