找出查询中哪些字词与作为lucene中的匹配项返回的给定文档匹配的最佳方法是什么?
我尝试了一种奇怪的方法,包括lucene contrib中的点击突出显示包,还有一个方法,可以针对最顶层的文档搜索查询中的每个单词(“docId:xy AND description:each_word_in_query”)。
没有得到满意的结果? 点击突出显示不会报告与第一个文档以外的文档匹配的一些单词。 我不确定第二种方法是否是最佳选择。
答案 0 :(得分:2)
搜索器中的方法explain是查看查询的哪个部分匹配以及它如何影响总体得分的好方法。
摘自Lucene In Action第二版:
public class Explainer {
public static void main(String[] args) throws Exception {
if (args.length != 2) {
System.err.println("Usage: Explainer <index dir> <query>");
System.exit(1);
}
String indexDir = args[0];
String queryExpression = args[1];
Directory directory = FSDirectory.open(new File(indexDir));
QueryParser parser = new QueryParser(Version.LUCENE_CURRENT,
"contents", new SimpleAnalyzer());
Query query = parser.parse(queryExpression);
System.out.println("Query: " + queryExpression);
IndexSearcher searcher = new IndexSearcher(directory);
TopDocs topDocs = searcher.search(query, 10);
for (int i = 0; i < topDocs.totalHits; i++) {
ScoreDoc match = topDocs.scoreDocs[i];
Explanation explanation = searcher.explain(query, match.doc);
System.out.println("----------");
Document doc = searcher.doc(match.doc);
System.out.println(doc.get("title"));
System.out.println(explanation.toString());
}
}
}
这将解释与查询匹配的每个文档的分数。
答案 1 :(得分:0)
尚未尝试过,但请查看org.apache.lucene.search.highlight.QueryTermExtractor的实现。