Солнечное пятно в разных средах

Итак, я использую solr sunspot пару дней и немного схожу с ума из-за проблемы с ним. Я искал ответ на многих разных сайтах, но, похоже, у многих людей разные идеи. Я пытаюсь выяснить, как sunspot управляет индексацией/переиндексацией моделей в разных средах с включенной автоматической индексацией. Вот что я сделал для себя вывод:

Dev/Prod: сохранение/обновление объекта автоматически обновляет индексацию этого объекта в solr.

Тест: сохранение/обновление объекта не приводит к автоматическому обновлению индекса, и вам нужно вызвать object.reindex! для того, чтобы оно вступило в силу.

Консоль: То же, что и при тестировании. Переиндексация требуется для правильного обновления solr.

Так это выглядит правильно? Меня так долго убивало, было ли что-то не так с моей настройкой солнечных пятен solr или если она просто не работает одинаково в этих разных средах. Любая помощь будет принята с благодарностью!


person Danny    schedule 03.05.2011    source источник


Ответы (2)


После обновления документа в Solr вы должны выполнить «фиксацию», чтобы Solr записал изменения на диск и они начали появляться в результатах поиска. Sunspot::Rails позаботится об этом автоматически в ходе запроса Rails, но вне этого (в тестах, из консоли) вам нужно сделать это явно. Это просто Sunspot.commit.

person outoftime    schedule 03.05.2011
comment
Во многих случаях вы можете установить Solr autoCommit maxTime примерно на 30–60 секунд и забыть об этом. Но если вам нужно автоматически протестировать это обновление (например, в вашей тестовой среде), тогда да, как говорит outoftime, выполните ручную фиксацию. - person Nick Zadrozny; 10.05.2011

Существует три основных способа обновления индекса:

  1. object.index: помечает объект для индексации, но не может быть немедленно проиндексирован
  2. object.index!: немедленно индексирует объект
  3. Class.reindex: немедленно индексирует все объекты модели.

Похоже, вы должны использовать метод .index! вместо метода .index на консоли.

person KurtPreston    schedule 05.12.2011
comment
Я проголосовал за этот ответ, потому что не смог найти описание в индексе! где-нибудь еще. Где вы его нашли? - person Blake Taylor; 29.03.2012