Pregunta

Estoy teniendo un problema donde SOLR no borrará el índice durante una importación completa.

Todos los servidores ejecutan SOLR 3.4, la configuración es como vainilla como puede ser.

Probé esto en nuestro entorno de desarrollo y en una instancia en mi propia computadora y recibí resultados similares.

El esquema es bastante simple, estos son los puntos destacados:

<schema name="System" version="1.4">
...
  </types>
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true" />
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0" />
    <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0" />
    <fieldType name="documentKey" class="solr.TextField">
      <analyzer type="index"> 
        <tokenizer class="solr.KeywordTokenizerFactory"/> 
      </analyzer> 
      <analyzer type="query"> 
        <tokenizer class="solr.KeywordTokenizerFactory"/> 
      </analyzer> 
    </fieldType>
  </types>
  <fields>
    <field name="document_id" type="documentKey" indexed="true" stored="true" required="true" />
    <field name="entity_id" type="long" indexed="true" stored="true" required="true" />
    <field name="name" type="string" indexed="true" stored="true" required="true" />
    <field name="entity_type" type="string" indexed="true" stored="true" required="false" />
    <field name="Timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/>
  </fields>
</schema>

de NOTA: - El campo Document_ID se calcula en la vista materializada que se utiliza para rellenar el índice, y es una combinación de otros campos no en este índice, pero es indominio de la entidad_id. Es único. - El campo Entity_ID es la clave de un par de tablas, y para el mismo document_id puede cambiar salvajemente entre una actualización y otra.

Antes de una actualización completa, si consulta el índice como tal:

http://localhost:8080/qq-solr/system/select/?rows=10&q=document_id:%22French_Polynesia/Huahine~4034376%22

obtengo:

<?xml version="1.0" encoding="UTF-8"?>
  <response>
    <lst name="responseHeader">
      <int name="status">0</int>
      <int name="QTime">5</int>
      <lst name="params">
        <str name="indent">true</str>
        <str name="q">document_id:"French_Polynesia/Huahine~4034376"</str>
        <str name="rows">10</str>
      </lst>
    </lst>
  <result name="response" numFound="1" start="0">
    <doc>
      <date name="Timestamp">2012-03-08T09:47:26.335Z</date>
      <str name="document_id">French_Polynesia/Huahine~4034376</str>
      <long name="entity_id">22902728</long>
      <str name="name">Huahine</str>
      <str name="type">LOCATION</str>
    </doc>
  </result>
</response>

Luego refresco:

http://localhost:8080/qq-solr/system/dataimport?command=full-import&clean=true&commit=true&optimize=true

(Sé que lo limpio, la comisión y la optimización son redundantes, pero los usé solo para asegurarme) y después de un tiempo recibo el mensaje que todo es A-OK.

Luego, consulto nuevamente al índice:

http://localhost:8080/qq-solr/system/select/?rows=10&q=document_id:%22French_Polynesia/Huahine~4034376%22

y yo obtengo:

<?xml version="1.0" encoding="UTF-8"?>
  <response>
    <lst name="responseHeader">
      <int name="status">0</int>
      <int name="QTime">5</int>
      <lst name="params">
        <str name="indent">true</str>
        <str name="q">document_id:"French_Polynesia/Huahine~4034376"</str>
        <str name="rows">10</str>
      </lst>
    </lst>
  <result name="response" numFound="1" start="0">
    <doc>
      <date name="Timestamp">2012-03-09T08:31:07.317Z</date>
      <str name="document_id">French_Polynesia/Huahine~4034376</str>
      <long name="entity_id">22902728</long>
      <str name="name">Huahine</str>
      <str name="type">LOCATION</str>
    </doc>
  </result>
</response>

¡Pero en la base de datos el entity_id es diferente!

Veo que la marca de tiempo se ha actualizado, de modo que el registro se haya tocado, pero ¿por qué se conserva el valor antiguo?

¿Fue útil?

Solución

Ejecutaría su proceso de DataImportHandler (DIH) a través de la modo de desarrollo interactivo para quePuede asegurarse de que su consulta de la base de datos esté recuperando la Entity_ID que está esperando.Debido a que la marca de tiempo en la entrada de Solr se está actualizando, su proceso de DIH se está ejecutando, pero supongo que la causa de estas mentiras en la forma en que se están recuperando los datos.

Otros consejos

Cada vez que hago una operación como esta con Solr, siempre borro manualmente el índice primero usando CURL para estar 100% seguro de que está limpiado.Aquí hay un tutorial: http://www.alphadevx.com/A / 365-CLEARING-A-SOLR-INDEX ÍNDICE

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