SOLR Full Aggiorna non cancella l'indice
-
10-12-2019 - |
Domanda
Sto avendo un problema in cui il solr non cancellerà l'indice durante un'importazione completa.
Tutti i server eseguono il solr 3.4, la configurazione è come vaniglia come può essere.
L'ho provato sul nostro ambiente di sviluppo e su un'istanza sul mio computer e ha ricevuto risultati simili.
Lo schema è piuttosto semplice, questi sono i punti salienti:
<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>
.
di nota: - Il campo Document_ID viene calcolato nella vista materializzata che viene utilizzata per popolare l'indice ed è una combinazione di altri campi non in questo indice, ma è indipendente dall'entità_ID. È unico. - Il campo Entity_ID è la chiave di un paio di tavoli e per lo stesso documento può cambiare selvaggiamente tra un aggiornamento e un altro.
Prima di un aggiornamento completo, se interrogo l'indice come tale:
http://localhost:8080/qq-solr/system/select/?rows=10&q=document_id:%22French_Polynesia/Huahine~4034376%22
.
Io ottengo:
<?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>
.
Allora Aggiornamento:
http://localhost:8080/qq-solr/system/dataimport?command=full-import&clean=true&commit=true&optimize=true
.
(Conosco il pulito, il commit e ottimizzare sono ridondanti, ma li ho usati solo per essere sicuri) e dopo un po 'ottengo il messaggio che tutto è A-OK.
Quindi interrogo nuovamente l'indice:
http://localhost:8080/qq-solr/system/select/?rows=10&q=document_id:%22French_Polynesia/Huahine~4034376%22
.
E ottengo:
<?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>
.
Ma nel database l'entity_id è diverso!
Vedo che il timestamp è stato aggiornato, in modo che il record sia stato toccato, ma perché il vecchio valore è mantenuto?
Soluzione
Gestirei il tuo processo DATAIstporthandler (DIH) attraverso il modalità di sviluppo interattivo in modo chePuoi assicurare che la tua query del database stia recuperando l'entity_id che ti aspetti.Poiché il timestamp sulla voce SOLR viene aggiornato, il processo DIH è in esecuzione, ma immagino che la causa di questo sta nel modo in cui i dati vengano recuperati.
Altri suggerimenti
Ogni volta che sto facendo un'operazione come questa con SOLR, cancella sempre manualmente l'indice prima di usare il ricciolo per essere sicuro del 100%.Ecco un tutorial: http://www.alphadevx.com/A / 365-Clearing-A-Solr-Search-Index