6

バックグラウンド

Solr 4.0.0 を使用しています。一連のサンプル ドキュメントのテキストにインデックスを作成し、Term Vector を有効にして、Fast Vector Highlighting を使用できるようにしました。

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

強調表示には、Break Iterator Boundary Scanner を SENTENCE 境界で使用しています。

<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 を設定してから、この方法で目的の文を処理/抽出する方がよいでしょうか?

4

1 に答える 1

4

ある種のカスタマイズを行う以外に、強調表示の結果でフラグメントのオフセット情報を返す方法はありません。

いくつかのオプションがあります:

1) オフセット情報を文字列にエンコードするカスタム Formatter を作成することで、Solr Highlighter を拡張できます。各TokenGroup用語の Formatter に渡される には、オフセットと位置の情報が格納されます。フォーマッタが a<span data-offset=X>text</span>または類似のものを返した場合、それは 1 つの方法です。これは最も単純ではないようです。

2)あなたが言ったように、を使用してフィールド全体を返しますhl.fragsize=0

3)追加のリクエストでTermVectorsComponentを使用し、そこから返されたオフセット/位置情報を強調表示されたフラグメントにマップします。

とにかく独自の断片化を行っている場合、最善の解決策は、Solr で断片化を行わず、すべて自分で処理することです。または、Java で独自のBoundaryScanner実装を実装して、フラグメントの分割におけるエンティティ抽出に関する独自の特別な知識を使用することもできます。

于 2013-03-01T12:58:21.560 に答える