java - lucene 在查询中获取匹配项

标签 java lucene hit-highlighting

找出查询中的哪些术语与作为 lucene 中的命中返回的给定文档匹配的最佳方法是什么?

我尝试了一种奇怪的方法,涉及 lucene contrib 中的命中高亮包,以及一种针对最顶层文档(“docId:xy AND description:each_word_in_query”)搜索查询中每个单词的方法。

没有得到满意的结果? 命中突出显示不会报告与第一个文档以外的文档匹配的某些单词。 我不确定第二种方法是否是最佳选择。

最佳答案

方法explain在搜索器中是查看查询的哪一部分匹配以及它如何影响整体得分的好方法。

示例取自《Lucene In Action》第二版:

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());
     }
  }
}

这将解释与查询匹配的每个文档的分数。

关于java - lucene 在查询中获取匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2851473/

相关文章:

java - 在 Solr 组件的准备方法中执行分布式搜索

ruby-on-rails - 太阳黑子的亮点没有出现

sql-server - 如何对 SQL Server 全文查询结果进行命中突出显示

java - Bag 在 Java 中以数组形式实现

java - 解析文本文件时如何跳行?

java - 如何将此排序映射方法从 java 转换为 Kotlin

Azure 搜索命中突出显示和匹配分隔符

java - 如何在java中将字符串转换为文件对象?

search - ElasticSearch - 搜索人名

indexing - 如何向现有的开放 Lucene 索引添加新文档