在 lucene 中找出与给定文档匹配的查询中哪些术语作为命中返回的最佳方法是什么?
我尝试了一种奇怪的方法,该方法涉及 lucene contrib 中的命中突出显示包,以及一种针对最顶层文档(“docId:xy AND description:each_word_in_query”)搜索查询中每个单词的方法。
没有得到满意的结果?命中突出显示不报告与第一个文档以外的文档匹配的某些单词。我不确定第二种方法是否是最好的选择。
在 lucene 中找出与给定文档匹配的查询中哪些术语作为命中返回的最佳方法是什么?
我尝试了一种奇怪的方法,该方法涉及 lucene contrib 中的命中突出显示包,以及一种针对最顶层文档(“docId:xy AND description:each_word_in_query”)搜索查询中每个单词的方法。
没有得到满意的结果?命中突出显示不报告与第一个文档以外的文档匹配的某些单词。我不确定第二种方法是否是最好的选择。
Searcher 中的方法explain是查看查询的哪个部分匹配以及它如何影响总体得分的好方法。
示例取自《Lucene In Action 2nd Edition》一书:
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());
}
}
}
这将解释与查询匹配的每个文档的分数。
还没试过,但是看看org.apache.lucene.search.highlight.QueryTermExtractor的实现。