【问题标题】:Retrieve text in Lucene proximity query在 Lucene 邻近查询中检索文本
【发布时间】:2017-06-14 06:28:32
【问题描述】:

我正在使用 Lucene 来索引一组句子。我的查询涉及两个“实体”,我创建了一个类似这样的邻近查询:

"EntityA EntityB"~22 

我想检索包含这两个实体的所有句子,最大范围为 22 个字符。 现在我想使用 Lucene Highlighter 来检索两个实体之间的单词。 我正在使用这样的代码将内容拆分为片段,但我不知道如何将片段设置在两个实体之间的精确点。

for (int i = 0; i < numTotalHits; i++) {
            int id = hits[i].doc;
            Document doc = searcher.doc(hits[i].doc);
            String text = doc.get("content");
            TokenStream tokenStream = TokenSources.getAnyTokenStream(searcher.getIndexReader(), id , "content", analyzer);
            String[] frag = getFragmentsWithHighlightedTerms(analyzer, query, "content", text, 10, 10);

            for (int j = 0; j < frag.length; j++) {
                    System.out.println((frag[j].toString()));
            }

我的目标是检索实体内的文本,例如:

entity1 --> Canada
entity2 --> Ottawa
sentence --> Natural Resources Canada, Canadian Forest Service, Ottawa.
result --> , Canadian Forest Service, 

【问题讨论】:

    标签: solr lucene information-retrieval lucene-highlighter


    【解决方案1】:

    据我所知,“foo bar”~22 语法将创建一个带有 22 斜率的短语查询。 22 指定最多可以有 22 次移动,以使 2 个令牌以与查询中相同的顺序彼此靠近。 22 步将涉及与其他标记交换位置,并且与标记长度无关(在此上下文中,标记表示单词)。

    一旦您使用短语查询检索到相关结果,我认为没有任何可靠的方法可以获取两个实体之间的整个片段。

    如果您可以自己构建查询对象,我实际上会自己使用正则表达式查询,因为您已经提到了 22 个字符范围,并强调了这一点。然后,您可以轻松地从突出显示的文本中修剪 2 个实体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      相关资源
      最近更新 更多