¿Puede Solr destacar también indicar la posición o desplazamiento de los fragmentos devueltos dentro del campo original?
highlighting (1)
Fondo
Usando Solr 4.0.0. He indexado el texto de un conjunto de documentos de muestra y he habilitado los vectores de términos para que pueda usar el resaltado vectorial rápido.
<field name="raw_text" type="text_en" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true" />
Para resaltar, estoy usando Break Iterator Boundary Scanner con los límites de 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>
Hago una consulta simple
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
El resaltado funciona bastante bien
<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>
Problema
Deseo poder enviar las oraciones resultantes para su posterior procesamiento (extracción de entidad, etc.), pero me gustaría rastrear las compensaciones de inicio / final de la oración resaltada dentro del campo de texto original (largo). ¿Hay una manera directa de hacer esto?
¿Sería mejor configurar hl.fragsize para devolver todo el campo y luego procesar / extraer las oraciones de interés de esta manera?
No hay forma de devolver la información de compensación de los fragmentos con los resultados de resaltado, aparte de hacer algún tipo de personalización.
Usted tiene algunas opciones que parece:
1) Puede ampliar el resaltador Solr creando un formateador personalizado que codifique la información de desplazamiento en la cadena. El TokenGroup
que se transfiere al formateador para cada término tendrá almacenada la información de desplazamiento y posición. Si su formateador devolvió un <span data-offset=X>text</span>
o algo similar, entonces eso sería de una sola manera. Esto no parece ser el más directo .
2) Como dijiste, devuelve todo el campo usando hl.fragsize=0
.
3) Utilice TermVectorsComponent en una solicitud adicional y asigne la información de desplazamiento / posición devuelta con los fragmentos resaltados.
Si de todos modos está fragmentando, la mejor solución para usted sería 0 fragmentar en Solr y manejarlo todo usted mismo. Alternativamente, podría implementar su propia implementación de BoundaryScanner
en Java para usar su propio conocimiento especial de extracción de entidad en la fragmentación de los fragmentos.