Pergunta

Estou tendo um problema em que o Solr não limpa o índice durante uma importação completa.

Todos os servidores rodam Solr 3.4, a configuração é a mais simples possível.

Tentei isso em nosso ambiente de desenvolvimento e em uma instância em meu próprio computador e obtive resultados semelhantes.

O esquema é bastante simples, estes são os pontos mais importantes:

<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 importância:- O campo document_id é calculado na visão materializada que é usada para preencher o índice, e é uma combinação de outros campos que não estão neste índice, mas é independente do entidade_id.É único.- O campo entidade_id é a chave de algumas tabelas e, para o mesmo document_id, pode mudar muito entre uma atualização e outra.

Antes de uma atualização completa, se eu consultar o índice como tal:

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

Eu recebo:

<?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>

Então eu atualizo:

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

(Eu sei que limpar, confirmar e otimizar são redundantes, mas usei-os apenas para ter certeza) e depois de um tempo recebo a mensagem de que está tudo bem.

Então eu consulto o índice novamente:

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

E eu recebo:

<?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>

Mas no banco de dados o entidade_id é diferente!

Vejo que o carimbo de data/hora foi atualizado, então esse registro foi alterado, mas por que o valor antigo está sendo retido?

Foi útil?

Solução

Eu executaria seu processo DataImportHandler (DIH) por meio do Modo de desenvolvimento interativo para que você possa garantir que sua consulta ao banco de dados esteja recuperando o entidade_id que você espera.Como o carimbo de data e hora na entrada solr está sendo atualizado, seu processo DIH está em execução, mas acho que a causa disso está na maneira como os dados estão sendo recuperados.

Outras dicas

Sempre que estou fazendo uma operação como essa com o Solr, sempre limpo manualmente o índice primeiro usando curl para ter 100% de certeza de que foi apagado.Aqui está um tutorial: http://www.alphadevx.com/a/365-Clearing-a-Solr-search-index

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top