2012-09-27 2 views
0

Я использую solr для индексации около 40 м элементов, а итоговый индексный файл составляет около 20 ГБ. Ниже приведено сообщение после импорта дельты:Что делает DataImportHandler после завершения индексирования?

<lst name="statusMessages"> 
<str name="Time Elapsed">0:51:44.149</str> 
<str name="Total Requests made to DataSource">1</str> 
<str name="Total Rows Fetched">5634016</str> 
<str name="Total Documents Skipped">0</str> 
<str name="Full Dump Started">2012-09-27 01:25:17</str> 
<str name=""> 
Indexing completed. Added/Updated: 5634016 documents. Deleted 0 documents. 
</str> 

Мне интересно, как solr выполняет этот статус? ? И сообщение репликации команда = подробности возвращение:

<lst name="masterDetails"> 
<str name="indexSize">36.69 GB</str> 

Индекс почти в два раза, и по-прежнему будет больше. Это очень смутило меня. Я занимаюсь дельта-импортом, почему индекс заменяется на двойной размер?

ответ

0

Если вы заменяете большинство ваших документов, это нормально. Обновление в lucene состоит из удаления и повторной установки документов, поскольку сегменты индекса являются однократными. Когда вы удаляете документ, вы на самом деле не удаляете его, а только помечаете его как удаленное, опять же, потому что сегменты являются однократными.

Удаленные документы будут удалены реальным образом, когда произойдет следующее слияние, когда будут созданы новые более крупные сегменты из небольших сегментов, которые у вас есть. Именно тогда вы должны увидеть уменьшение размера индекса. Это означает, что ваш индексный размер должен не только увеличиваться. Слияния происходят более или менее в соответствии с используемой политикой слияния. Если вы хотите вручную принудительно слить, вы можете использовать операцию forceMerge, которая является новым именем для оптимизации. В зависимости от используемой версии solr вам необходимо использовать либо первый, либо второй. Будьте осторожны, так как forceMerge занимает некоторое время, если у вас много документов. Посмотрите также на статью this.

+0

Я установил, что мой индекс имеет только один сегмент, это может быть причиной, которая вызывает долгое время для дельта-импорта. Я попытаюсь установить maxMergeDocs. – bata

+0

Ницца, вы можете принять или отложить ответ, если найдете его полезным. – javanna

0

Перед Solr 3.6 dataImportHandler установить Оптимизировать = True по умолчанию:

http://wiki.apache.org/solr/DataImportHandler

Это вызывает слияние всех сегментов в один, независимо от других настроек. Я думаю, вы можете решить эту проблему, добавив флажок optimize в debug.jsp, хотя я на самом деле не пробовал его.

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