2012-03-09 4 views
0

У меня возникла проблема, когда Solr не очистит индекс во время полного импорта.Solr полное обновление не очищает индекс

Все серверы управляют Solr 3.4, конфигурация как ваниль, как может быть.

Я попробовал это в нашей среде разработки и на экземпляре на своем собственном компьютере и получил аналогичные результаты.

Схема довольно проста, эти основные моменты:

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

отметить: - The document_id поле рассчитывается в материализованного представления, который используется для заполнения индекса, и представляет собой комбинацию другие поля не в этом индексе, но являются независимыми от entity_id. Это уникально. - Поле entity_id является ключом пары таблиц, и для того же document_id он может сильно измениться между обновлением и другим.

Перед полным обновлением, если я запрашиваю индекс как таковой:

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

я получаю:

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

Тогда я обновить:

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

(я знаю, чистый , фиксация и оптимизация избыточны, но я использовал их, чтобы убедиться), и через некоторое время я получаю сообщение о том, что все в порядке.

Затем я запрашиваю индекс снова:

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

И я получаю:

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

Но в базе данных ENTITY_ID отличается!

Я вижу, что временная метка обновлена, так что запись была затронута, но почему старое значение сохраняется?

+0

Не отвечает на ваш вопрос, но почему вы используете оптимизацию с помощью Solr 3.x? Посмотрите [здесь] (http://www.searchworkings.org/blog/-/blogs/simon-says%3A-optimize-is-bad-for-you), вам, скорее всего, это не нужно, и это даже плохо! Я бы использовал optimize = false с dih, чтобы избежать этого плохого поведения по умолчанию. – javanna

ответ

0

Я бы запустил процесс DataImportHandler (DIH) через Interactive Development Mode, чтобы вы могли заверить, что ваш запрос базы данных извлекает объект entity_id, который вы ожидаете. Поскольку временная метка записи solr обновляется, процесс DIH работает, но я предполагаю, что причина этого заключается в том, как данные извлекаются.

+0

Как вы сказали, и данные выглядели нормально, но после этого ядро ​​начало нормально работать. Что странно, так это то, что это поведение продолжалось через несколько обновлений, и Tomcat перезагружается, а другое ядро ​​в том же экземпляре Solr не проявляет такого же поведения. Я приму свой ответ, поскольку это тот, который заставил меня двигаться дальше. – GVdP

Смежные вопросы