2013-09-18 2 views
3

У нас есть следующая проблема. Мы хотим сделать полный переиндекс со 100% доступностью чтения во время процесса. Проблема возникает при удалении старых документов из индекса. На данный момент мы делаем sth. например:Solr полное переиндексация без простоя

1) fetch all data from db and update solr index per solrServer.add() 
2) get all document ids that were updated and compare them with all the document ids in index 
3) delete all documents that are in index but weren´t updated 

Это похоже на работу, но может быть, это лучшее или простое решение для этой задачи?

ответ

2

Изменения не становятся видимыми до момента фиксации. Таким образом, вы можете удалить удаление, а затем индексировать все свои документы. Просто убедитесь, что автоматических коммитов нет. Это, очевидно, требует большего объема памяти.

В качестве альтернативы вы можете сделать отдельное поле с печатью поколения (например, увеличение идентификатора или метки времени). Затем вы выдаете запрос delete, чтобы забрать левые документы со старым поколением.

Наконец, вы можете индексировать новый Core/Collection, а затем менять активную коллекцию, указывая на новую. Затем вы можете просто удалить старый каталог коллекции.

+0

Я надеялся, что будет какое-то более чистое решение, но я буду оценивать три варианта, в настоящее время я склоняюсь к полю флага удаления. Большое спасибо. – chris

0

Похоже, что у вас может быть проблема с производительностью при удалении. Если вы сделаете это:

удаления ID: 12345 удалить ID: 23456 удалить ID: 13254

то это намного медленнее, чем это:

удалить идентификатор: (12345 ИЛИ 23456 ИЛИ 13254)

Соберите список идентификаторов, которые необходимо удалить, выставить их группами по 100 или около того и преобразовать эти партии в запросы на удаление с помощью круглых скобок и OR. Я сделал это с партиями удалений, насчитывающими несколько тысяч, и это намного быстрее, чем переходить по одному за раз.

+0

У нас нет проблемы с производительностью, конечно, мы используем ConcurrentUpdateSolrServer для этой пакетной задачи, которая автоматически ставит в очередь обновления и производит пакетные обновления по индексу solr. – chris

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