NumDocs ядра Solr не равен сумме обработанных документов - PullRequest
3 голосов
/ 13 декабря 2011

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

Данные для документов для индексации поступают из базы данных Oracle. Поскольку мне приходится обрабатывать множество CLOB, я разделил импорт данных на несколько requestHandlers, чтобы повысить производительность при извлечении данных из базы данных (многопоточное моделирование). Эти requestHandlers настроены в моем файле 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 requestHandlers, и мои настроены следующим образом:

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

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

1 Ответ

2 голосов
/ 16 декабря 2011

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

...