Дубликаты в индексе Solr - элементы добавляются дважды или более - PullRequest
3 голосов
/ 05 июля 2011

Считайте, что у вас есть индекс Solr с прибл.20 миллионов предметов.При индексации этих элементов они добавляются в индекс партиями.

Приблизительно 5% всех этих элементов индексируются дважды или более раз, поэтому возникает проблема дубликатов .

Если вы посмотрите журнал, то увидите, что эти элементы действительно добавляются дважды (или больше).Часто с интервалом в 2-3 минуты между ними и другими элементами между ними.

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

Вот некоторые элементы конфигурации в solrconfig.xml :

<indexDefaults>
.....
<mergeFactor>10</mergeFactor>
<ramBufferSizeMB>128</ramBufferSizeMB>
<maxFieldLength>10000</maxFieldLength>
<writeLockTimeout>1000</writeLockTimeout>
<commitLockTimeout>10000</commitLockTimeout>

<mergePolicy class="org.apache.lucene.index.LogByteSizeMergePolicy">
<double name="maxMergeMB">1024.0</double>
</mergePolicy>

<mainIndex>
<useCompoundFile>false</useCompoundFile>
<ramBufferSizeMB>128</ramBufferSizeMB>
<mergeFactor>10</mergeFactor>

Iиспользую Solr 1.4.1 и Tomcat 7.0.16.Также я использую новейшую библиотеку SolrNET.

Что может вызвать проблему с дубликатами?Спасибо за все комментарии!

Ответы [ 5 ]

6 голосов
/ 05 июля 2011

Чтобы полностью ответить на ваш вопрос, я должен знать схему. В схеме есть поле уникального идентификатора, которое больше похоже на уникальный ключ в БД, убедитесь, что уникальный идентификатор документа сделан уникальным ключом, тогда дубликаты будут перезаписаны, чтобы сохранить только одно значение.

4 голосов
/ 05 июля 2011

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

Похоже, это ваша ошибка, и документы на самом деле не идентичны.

Убедитесь, что поля схемы и идентификатора верны.

1 голос
/ 06 июля 2011

В качестве дополнения к тому, что было сказано выше, решением в этом случае может быть создание уникального идентификатора (или определение одного из полей в качестве уникального идентификатора) для документа из кода перед его отправкой в ​​SOLR..

В этом случае вы убедитесь, что документ, который вы хотите обновить, будет перезаписан, а не воссоздан.

0 голосов
/ 07 июля 2011

Хорошо, оказалось, что в коде, обновляющем индекс, было несколько ошибок. Вместо обновления у нас всегда был документ, добавленный в индекс, даже если он уже существовал.

Он не был перезаписан, потому что каждый документ в нашем индексе Solr имеет свой собственный GUID.

Спасибо за ваши ответы и время!

0 голосов
/ 06 июля 2011

На самом деле, все добавленные документы будут иметь автоматически сгенерированный уникальный ключ через собственный тип uuid Solr:

<field name="uid" type="uuid" indexed="true" stored="true" default="NEW"/>

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

Я вернусь!Пока спасибо!

...