Количество документов ядра Solr не равно сумме обработанных документов

У меня проблема при создании моего индекса Solr (Lucene и Solr 3.4.0 на Apache Tomcat 6.0.33).

Данные для индексируемых документов поступают из базы данных Oracle. Поскольку мне приходится обрабатывать множество CLOB, я разделил импорт данных на несколько обработчиков запросов, чтобы повысить производительность при извлечении данных из базы данных (многопоточное моделирование). Эти requestHandler настроены в моем solrconfig.xml следующим образом:

<requestHandler name="/segment-#" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
        <str name="config">segment-#.xml</str>
    </lst>
</requestHandler>

Чтобы построить индекс, я запускаю первый DataImportHandler с параметром clean = true, а затем начинаю полный импорт всех остальных сегментов. Когда все сегменты пройдены, страницы состояния (http://host/solr/segment-#) сообщают мне, что для каждого сегмента было получено и обработано правильное количество строк (в соответствии с оператором SELECT COUNT (*) в базе данных). Пока все в порядке.

Но если я сейчас вызову страницу состояния ядра (http://host/solr/admin/core ) numDocs не является суммой всех сегментов. Всегда отсутствуют какие-то документы. Я несколько раз пробовал построить индекс, разница всегда была разная. В сумме в указателе должно быть 8,3 миллиона документов, но на самом деле всегда отсутствуют около 100 000 записей. NumDocs - это тот же номер, который я могу найти с помощью *:* запроса через интерфейс администратора Solr.

Я включил информационный поток, посмотрел записи журнала, а также журналы Tomcat, но не нашел подсказки. Что я делаю неправильно?

Я использую 17 обработчиков запросов, и мои ‹indexDefaults› настроены следующим образом:

<useCompoundFile>false</useCompoundFile>
<mergeFactor>17</mergeFactor>
<ramBufferSizeMB>32</ramBufferSizeMB>
<maxBufferedDocs>50000</maxBufferedDocs>
<maxFieldLength>2000000</maxFieldLength>
<writeLockTimeout>1000</writeLockTimeout>
<commitLockTimeout>10000</commitLockTimeout>
<lockType>native</lockType>

Помощь очень ценится. Заранее большое спасибо!


person tobwoerk    schedule 13.12.2011    source источник
comment
У меня тоже была похожая проблема. В моем случае документы отсутствовали, потому что solr не мог преобразовать значение некоторого поля, которое я отправил, в тип поля. Если бы у меня было целочисленное поле No_Of_Apples в solr, и я пытался импортировать «три» вместо «3», импортер выдает исключение и пропускает документ. Возможно, это так, проверьте журнал apache / solr, чтобы увидеть исключения.   -  person Dorin    schedule 15.12.2011


Ответы (1)


Я обнаружил проблему, просто пришлось RTFM ... Я обманул себя, потому что параметр очистки по умолчанию ИСТИНА, я думал, что это ЛОЖЬ. Поэтому я просто вызвал первый URL-адрес с помощью & clean = true вместо того, чтобы вызывать все остальные URL-адреса с помощью & clean = false. Таким образом, каждый вызов URL приводил к очистке всего индекса. Если я вызываю URL-адреса с помощью & clean = false, сумма всех документов верна.

person tobwoerk    schedule 16.12.2011
comment
Сэр, вы только что избавили меня от 4 часов чесания головы. Спасибо! - person Shivan Dragon; 07.10.2013