什么是找出哪些方面在对给定文件相匹配的查询返回在Lucene的一击的最佳方式?Lucene的匹配得到查询条件
我试过了一个奇怪的方法,它涉及到lucene contrib中的命中突出显示包以及搜索查询中对顶部最多文档(“docId:xy和description:each_word_in_query”)的每个单词的方法。
不要得到满意的结果? 命中突出显示不会报告与第一个文档不匹配的某些文字。 我不确定第二种方法是否是最佳选择。
什么是找出哪些方面在对给定文件相匹配的查询返回在Lucene的一击的最佳方式?Lucene的匹配得到查询条件
我试过了一个奇怪的方法,它涉及到lucene contrib中的命中突出显示包以及搜索查询中对顶部最多文档(“docId:xy和description:each_word_in_query”)的每个单词的方法。
不要得到满意的结果? 命中突出显示不会报告与第一个文档不匹配的某些文字。 我不确定第二种方法是否是最佳选择。
在搜索的方法explain是一个很好的方式,看看哪一个查询的一部分匹配以及它如何影响整体分数。
例如,从书的Lucene在行动第二版采取:
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的实施。
它也适用于模糊匹配。 – 2010-05-17 18:12:13
我想查询查询中的术语,以便在查询中“狗”与“狗”匹配。我想确定它是匹配的查询中的术语“狗”。 – 2010-05-17 18:13:12
你可以举一些例子代码 – 2010-05-17 18:18:40