Обновление индекса Solr по запросу - PullRequest
7 голосов
/ 08 февраля 2012

Мне нужно обновлять большое количество документов в solr очень часто. Например, установите «online» = true для user_id = 5 и т. Д. Но скорость индексации через обработчик http очень низкая. Поддержка Solr удаление документов по запросу, есть ли способ обновить по запросу?

Ответы [ 5 ]

10 голосов
/ 08 февраля 2012

Нет, к сожалению, нет такой функции, как обновление по запросу.Это было бы действительно полезно, например, новая функция, позволяющая обновлять документ без необходимости повторной его отправки;для этого есть 5 лет вопрос о джира .На данный момент вам нужно просто повторно отправить документы с обновленными полями, они будут перезаписаны (это означает, что удалены + повторно вставлены), если вы используете тот же uniqueKey.

Кстати, вы делаетеHTTP-запрос для каждого документа для обновления?Если да, вы можете ускорить отправку более одного документа за раз, например:

<add>
  <doc>
    <field name="employeeId">05991</field>
    <field name="office">Bridgewater</field>
  </doc>
  <doc>
    <field name="employeeId">05992</field>
    <field name="office">Bridgewater</field>
  </doc>
  <doc>
    <field name="employeeId">05993</field>
    <field name="office">Bridgewater</field>
  </doc>
</add>
7 голосов
/ 07 ноября 2014

Обновлений по запросу пока нет, но ответы 2012 года устарели. Теперь в Solr 4.x есть https://wiki.apache.org/solr/Atomic_Updates, поэтому вы можете делать то, что вы хотите, в два этапа, не требуя доступа к исходному документу.

1 голос
/ 23 октября 2013

Вы можете разработать минимальный плагин Solr, который сделает всю работу за вас на стороне сервера solr.
Посмотри на: Обсуждение в списке рассылки Solr

1 голос
/ 08 февраля 2012

Как ответил Джаванна, нет средств для обновления по запросу, поскольку Solr также не позволяет обновлять отдельные поля в документе, хранящемся в индексе, поэтому повторная отправка является единственным методом обновления.Мне любопытно, почему ваши обновления такие медленные.Ниже приведено несколько способов повышения скорости обновления.

  • Если вы выполняете коммит после обновления каждого отдельного документа, тогда подождите и выпустите обновление только после обновления пакетадокументы в указателе.Из Solr Tutorial :

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

  • Обратите внимание на использование программных или автоматических программных коммитов для уменьшения задержки обновления.Более подробную информацию см. На странице NearRealtimeSearch в Solr Wiki.

0 голосов
/ 08 февраля 2012

Я бы использовал DIH с измененным запросом SQL, который будет принимать параметры из URL.SQL-запрос будет выглядеть следующим образом:

SELECT user_name, user_online FROM users WHERE user_id=${dataimporter.request.user_id}

Затем, чтобы переиндексировать выбранных пользователей, вы добавляете параметр user_id в URL следующим образом:

http://<host>:<port>/solr/dataimport?command=full-import&clean=false&user_id=5

Документы об использовании DIH и пользовательских параметров: Solr - DataImportHandler

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