Решайте и оптимизируйте вопросы - PullRequest
65 голосов
/ 26 января 2010

У меня есть сайт объявлений. Пользователи могут размещать объявления, редактировать объявления, просматривать объявления и т. Д.

Каждый раз, когда пользователь размещает объявление, я добавляю документ в Solr. Я не знаю, однако, когда совершать это. Коммит замедляет вещи из того, что я прочитал.

Как мне это сделать? Автокоммит каждые 12 часов или около того?

Кроме того, как мне это сделать с помощью оптимизации?

Ответы [ 4 ]

137 голосов
/ 17 сентября 2010

Немного подробнее о коммите / оптимизации:

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

Оптимизация: это похоже на команду дефрагментации на жестком диске.Он реорганизует индекс в сегменты (увеличивает скорость поиска) и удаляет все удаленные (замененные) документы.Solr - это хранилище данных только для чтения, поэтому каждый раз, когда вы индексируете документ, он помечает старый документ как удаленный, а затем создает новый документ для замены удаленного.Оптимизировать удалит эти удаленные документы.Вы можете увидеть количество найденных документов и количество удаленных документов, перейдя на страницу статистики Solr и посмотрев числа numDocs и maxDocs.Разница между этими двумя числами заключается в количестве удаленных (не доступных для поиска) документов в индексе.

Кроме того, Optimize создает полный новый индекс из старого, а затем переключается на новый индекс после завершения.Поэтому команде требуется удвоить пространство для выполнения действия.Поэтому вам нужно убедиться, что размер вашего индекса не превышает% 50 вашего свободного места на жестком диске.(Это практическое правило, обычно из-за удаленных документов требуется менее 50%)

Сервер индексирования / сервер поиска: Пол Браун был прав в том, что лучший дизайн для solr - это выделение и выделение сервера. настроил на индексацию, а затем реплицировал изменения на поисковых серверах.Вы можете настроить сервер индекса так, чтобы он имел несколько конечных точек индекса.

eg: http://solrindex01/index1; http://solrindex01/index2

И так как сервер индекса не выполняет поиск контента, его можно настроить с использованием различных следов памяти, команд потепления индекса и т. Д.

Надеюсь, это полезная информация для всех.

37 голосов
/ 26 января 2010

На самом деле, частое принятие и оптимизация делают вещи очень медленными. Это слишком тяжело.

После дня поиска и прочтения материала я узнал следующее:

1 - Оптимизация приводит к удвоению индекса при одновременной оптимизации и замедляет работу.

2 - фиксация после каждого добавления НЕ является хорошей идеей, лучше фиксировать пару раз в день, а затем выполнять оптимизацию не более одного раза в день.

3 - Для параметра Commit следует установить значение "autoCommit" в файле solrconfig.xml, и там его следует настроить в соответствии с вашими потребностями.

7 голосов
/ 12 июля 2010

Способ, который обычно выполняется подобным образом, заключается в выполнении операций фиксации / оптимизации на узле Solr, расположенном вне пути запроса для ваших пользователей. Это требует дополнительного оборудования, но гарантирует, что снижение производительности операций индексирования не повлияет на ваших пользователей. Репликация используется для периодической передачи оптимизированных файлов индекса с главного узла на узлы, которые выполняют поисковые запросы для пользователей.

1 голос
/ 26 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...