当前位置: 首页 > 面试题库 >

lucene在查询中获得匹配的术语

田德运
2023-03-14
问题内容

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

我尝试了一种奇怪的方法,其中涉及在Lucene Contrib中命中高亮显示包,还有一种方法针对最上面的文档(“ docId:xy AND
description:each_word_in_query”)在查询中搜索每个单词。

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


问题答案:

Searcher中解释的方法是查看查询的哪一部分匹配以及它如何影响总得分的一种好方法。

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

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



 类似资料:
  • 在这种情况下,我没有得到任何结果。我试图弄清楚是否存在“NumericTermQuery”,但找不到。我可以做一些棘手的事情(为我正在搜索的术语做一个范围查询),但我不喜欢这个解决方案。 谢谢你!

  • 问题内容: 我有以下 匹配 查询字符串: 我想它的意思是,但实际上它能执行。 然后我尝试了 术语 查询字符串: 它执行,显示 术语 查询通过数组支持多个OR条件。 我很好奇为什么 匹配 查询不支持通过数组的 OR 条件?并且它不显示任何语法错误。 问题答案: 该查询仅支持要指定的单个字符串值。官方文档中没有明确指定它,但是如果您愿意阅读的源代码,则可以看到,在解析字段时,解析器将跳过标记来分隔数组

  • 问题内容: 我需要 从多个Lucene索引中 提取 频率最高的术语 ,以将其用于某些语义分析。 因此,我想获取可能出现次数最多的前30个词(仍未决定阈值,我将分析结果)及其按索引计数。我知道由于故意删除重复项,我可能会失去一些精度,但是就目前而言,我可以接受。 因此,对于所提出的解决方案,(不必说可能)速度并不重要,因为我会进行静态分析,所以我会强调实现的 简便性 ,因为我不太了解Lucene,也

  • 我正在尝试捕获异常,但无效。以下是我视图中的代码: 我还尝试了:“除了act_edit.DoesNotExist:”但错误仍然存在“活动匹配查询不存在”。你知道吗? 谢谢

  • 问题内容: 我想获取与“ statusCode”不匹配的结果:200 为了匹配字段中的文本,您可以使用 我尝试过这样的事情: 根据:https : //www.elastic.co/guide/zh- CN/elasticsearch/reference/current/query-dsl-bool- query.html 问题答案: 试试这个

  • 问题内容: 我正在用查询查询我的elasticsearch索引。查询本身的结构与此类似 我希望能够确定所有这些查询中哪一个是与结果匹配的查询。是否有内置的elasticsearch方法允许这样做,还是我必须手动进行? 问题答案: 您可以使用命名查询,然后在结果中获得匹配的查询的名称。 然后,在结果中,您将获得一个数组,其中包含与文档匹配的查询的名称。