Solr 高亮是不是还可以指示返回的片段在原始字段中的位置或偏移量?

Posted

技术标签:

【中文标题】Solr 高亮是不是还可以指示返回的片段在原始字段中的位置或偏移量?【英文标题】:Can Solr highlighting also indicate the position or offset of the returned fragments within the original field?Solr 高亮是否还可以指示返回的片段在原始字段中的位置或偏移量? 【发布时间】:2012-12-01 12:51:50 【问题描述】:

背景

使用 Solr 4.0.0。我已经索引了一组示例文档的文本并启用了术语向量,因此我可以使用快速向量突出显示

<field name="raw_text" type="text_en" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true" />

为了突出显示,我使用了带有 SENTENCE 边界的 Break Iterator Boundary Scanner。

<boundaryScanner name="breakIterator" class="solr.highlight.BreakIteratorBoundaryScanner">
    <lst name="defaults">
      <!-- type should be one of CHARACTER, WORD(default), LINE and SENTENCE -->
      <str name="hl.bs.type">SENTENCE</str>
    </lst>
  </boundaryScanner>

我做一个简单的查询

http://localhost:8983/solr/documents/select?q=raw_text%3AArtibonite&wt=xml&hl=true&hl.fl=raw_text&hl.useFastVectorHighlighter=true&hl.snippets=100&hl.boundaryScanner=breakIterator

突出显示效果很好

<response>
...
<result name="response" numFound="5" start="0">
<doc>
  <str name="id">-1071691270</str>
  <str name="raw_text">
     Final Report of the Independent Panel of Experts on the Cholera
     Outbreak in Haiti Dr. Alejando Cravioto (Chair) International
     Center for Diarrhoeal Disease Research, Dhaka, Bangladesh Dr.
     Claudio F. Lanata Instituto de Investigación Nutricional, and
     The US Navy Medical Research Unit 6, Lima, Peru Engr. Daniele
     S. Lantagne Harvard University... ~SNIP~
  </str>
<doc>
<lst name="highlighting">
  <lst name="-1071691270">
    <arr name="raw_text">
      ...
      <str>
        The timeline suggests that the outbreak spread along
        the <em>Artibonite</em> River. After establishing that
        the cases began in the upper reaches of the Artibonite
        River, potential sources of contamination that could have
        initiated the outbreak were investigated.
      </str>
      ...
    </arr>
  </lst>
</lst>

问题

我希望能够发送生成的句子以进行进一步处理(实体提取等),但我想跟踪原始(长)文本字段中突出显示的句子的开始/结束偏移量。 有没有直接的方法来做到这一点?

将 hl.fragsize 设置为返回整个字段然后以这种方式处理/提取感兴趣的句子会更好吗?

【问题讨论】:

【参考方案1】:

除了进行某种自定义之外,没有办法返回片段的偏移信息以及突出显示结果。

你似乎有几个选择:

1) 您可以通过创建将偏移信息编码到字符串中的自定义格式化程序来扩展 Solr 荧光笔。为每个术语传递给格式化程序的TokenGroup 将在其中存储偏移量和位置信息。如果您的格式化程序返回 &lt;span data-offset=X&gt;text&lt;/span&gt; 或类似的东西,那将是一种方法。这似乎不是最直接的

2) 如您所说,使用hl.fragsize=0 返回整个字段。

3) 在附加请求中使用TermVectorsComponent,并将从它返回的偏移/位置信息与突出显示的片段映射。

如果您还是自己进行分片,对您来说最好的解决方案可能是在 Solr 中进行 0 分片并自己处理。或者,您可以在 Java 中实现您自己的 BoundaryScanner 实现,以使用您自己在实体提取方面的特殊知识来分解片段。

【讨论】:

以上是关于Solr 高亮是不是还可以指示返回的片段在原始字段中的位置或偏移量?的主要内容,如果未能解决你的问题,请参考以下文章

在 solr 3.4 中放置突出显示片段配置的位置

Solr、sunburnt (python) 和高亮显示:操作方法?

solr 可以返回函数值(不是 solr 分数或文档字段)吗?

jQuery UI高亮效果可以应用于表单文本输入吗?

Solr Highlighting:如何为同一字段请求多个片段长度?

Solr自学笔记 2 —— Solr 查询,排序, 高亮