Индекс солнечного пятна только при изменении полей поиска - PullRequest
8 голосов
/ 18 мая 2011

Мы используем sunspot для поиска в нашем последнем проекте. Мы также используем devise и индексируем нашу пользовательскую модель следующим образом:

searchable do
  text :fname
  text :lname
  text :email
  text :description
  text :twitter_username
end

При такой настройке пользователь не может даже войти в систему, если не запущен solr. Это подразумевает, что при каждом сохранении модели User существует связь с нашим сервером solr (переиндексация?), Даже если ни одно из полей поиска не изменилось. Это правильно?

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

Есть ли способ настроить sunspot для взаимодействия только с solr, когда изменяется поле поиска?

1 Ответ

12 голосов
/ 18 мая 2011

Полагаю, у вас последняя версия самоцвета солнечного пятна.

  1. Sunspot переиндексирует каждый раз, когда модель меняется. Чтобы настроить это поведение (см. параметры для поиска ):

    searchable: ignore_attribute_changes_of => [: average_rating,: permalink] do текст: название конец

    Взгляните на исходный код: https://github.com/outoftime/sunspot/blob/master/sunspot_rails/lib/sunspot/rails/searchable.rb

  2. Ваш сайт все еще должен работать до первого запроса к решению:

    • либо запрос полнотекстового поиска

    • либо запрос на индексирование

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

Дополнительные советы:

  • на самом деле, не индексация занимает много времени, это команда commit; команда commit по умолчанию выдается в конце каждого веб-запроса; Это очень дорого в производственной среде. Я советую вам изменить политику на автокоммит после X секунд ;

  • если вы хотите, чтобы вы исправляли солнечное пятно, чтобы ваш сайт работал в случае сбоя сервера solr, я советую вам взглянуть на этот драгоценный камень, который проверяет интерфейс сервера для тестовой среды: sunspot_matchers

...