2010-05-17 178 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的实施。