2010-05-17 186 views
2

什麼是找出哪些方面在對給定文件相匹配的查詢返回在Lucene的一擊的最佳方式?Lucene的匹配得到查詢條件

我試過了一個奇怪的方法,它涉及到lucene contrib中的命中突出顯示包以及搜索查詢中對頂部最多文檔(「docId:xy和description:each_word_in_query」)的每個單詞的方法。

不要得到滿意的結果? 命中突出顯示不會報告與第一個文檔不匹配的某些文字。 我不確定第二種方法是否是最佳選擇。

回答

2

在搜索的方法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()); 
    } 
    } 
} 

這將解釋每一個與查詢匹配的文檔的分數。

+0

它也適用於模糊匹配。 – 2010-05-17 18:12:13

+0

我想查詢查詢中的術語,以便在查詢中「狗」與「狗」匹配。我想確定它是匹配的查詢中的術語「狗」。 – 2010-05-17 18:13:12

+0

你可以舉一些例子代碼 – 2010-05-17 18:18:40

0

沒試過呢,但看看org.apache.lucene.search.highlight.QueryTermExtractor的實施。