Pregunta

He leído un par de tutoriales y levantase la documentación Solr. Pero hay algo que no está claro para mí. Me explico:

ASUME Vamos que el siguiente documento deberá ser indexado:

<doc>
  <field name="id">R12345</field>
  <field name="title">My title</field>
  <field name="content">My Content</field>
</doc>

A diferencia de este documento, el índice debe contener un campo extra llamado "docType". Este campo de índice adicional debe ser llenado mediante una "regla de finalización". La idea detrás de esto:

Si identificación comienza con el carácter "R" y luego escribir la cadena "Resolve" en docType campo en el índice. Si identificación comienza con el carácter "C" y luego escribir la cadena "Contribute" en docType campo en el índice.

El citado documento deberá estar disponible en el índice con los siguientes campos:

id=R12345
title=My Title
content=My Content
docType=Resolve

Mi idea es utilizar un analizador para esto. El resultado del analizador a continuación, se escribe en el campo "id" en el índice como de costumbre (sólo una copia del texto original), pero el resultado "Resolve" o "Contribuir" debe ser escrito en otro campo.

Mi pregunta básica es: ¿Cómo se puede lograr esto en teh Analyzer (Java cortó)? Para que sea más complejo es el campo de índice "docType" debe ser consultada y debe estar disponible en el resultado de búsqueda. ¿Cómo se verá el esquema como el de Identificación de campo y docType?

Gracias de antemano Tobias

¿Fue útil?

Solución

Si sólo necesita el valor indexado, entonces el enfoque esquema es suficiente. Crear un nuevo FieldType que realiza el procesamiento necesario, crear un campo de su nuevo tipo, y establecer un campo de copia para copiar el valor de id:

<fieldType name="doctypeField" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.PatternReplaceFilterFactory" pattern="([CR]).*" replacement="$1" replace="all" />
    <filter class="solr.PatternReplaceFilterFactory" pattern="C" replacement="Contribute" replace="all" />
    <filter class="solr.PatternReplaceFilterFactory" pattern="R" replacement="Resolve" replace="all" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

<field name="doctype" type="doctypeField" indexed="true" stored="false" required="false" />

<copyField source="id" dest="doctype"/>

Es posible que desee tener en cuenta que usted no conseguirá un valor almacenado de esta. Si necesita que, a continuación, usted debe tener el valor docType descubierto antes de alimentar el documento de Solr -., Por ejemplo, mediante la creación en la consulta SQL, si su fuente de contenido es SQL, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top