Индекс солнечных пятен только при изменении доступных для поиска полей

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

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

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

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

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


person ghempton    schedule 18.05.2011    source источник
comment
Если вы хотите обеспечить вход в систему, когда Sunspot не работает, загляните на github.com/bdurand/sunspot_index_queue.   -  person lulalala    schedule 31.10.2014


Ответы (1)


Я предполагаю, что у вас есть последняя версия драгоценного камня солнечных пятен.

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

    доступен для поиска :ignore_attribute_changes_of => [ :average_rating, :permalink ] do text :title end

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

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

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

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

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

Больше советов:

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

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

person Vlad Zloteanu    schedule 18.05.2011
comment
Прибегнет к ignore_attributes of. Немного раздражает необходимость указывать это, когда мы явно объявляем поля для поиска. Предвидите ли вы какие-либо осложнения, если я создам патч, добавляющий в searchable.rb дополнительную логику для запроса настройки солнечных пятен, чтобы определить, повлияют ли измененные поля на индекс? - person ghempton; 20.05.2011