什麼是找出哪些方面在對給定文件相匹配的查詢返回在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