Новые поля Sunspot Solr не индексируются

Я использую Sunspot Solr (2.2.7) для поиска и индексации модели дополненной реальности в нашем приложении, но здесь мы делаем что-то немного другое. Фактическое индексируемое содержимое хранится в сериализованном поле, и я расширил классы Sunspot::Adapters::InstanceAdapter и Sunspot::Adapters::DataAccessor для поддержки нашего варианта использования и зарегистрировал эти адаптеры.

Я определяю индексируемые поля в классе config/initializers/sunspot.rb, и пример конфигурации выглядит так:

Sunspot.setup(Office) do
  time :published_at, trie: true
  integer :id
  text :name
  integer :region_id
  boolean :is_active
  text :address
  text :city
  text :postal_area
  string :postal_code
  string :abbreviation
  integer :person_ids, multiple: true
  string :supported_locales, multiple: true
  string :slug
end

Кажется, все работает в разработке и производстве (Ubuntu 16.04 с Solr 6.4.2).

Проблема, с которой я сталкиваюсь, возникает, когда мне нужно добавить новое поле в индекс и попытаться внести это изменение в производство. Когда я добавляю указанную выше строку в блок Sunspot.setup

integer :department_ids, multiple: true

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

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

Пример ответа JSON для возвращаемого Office выглядит примерно так:

{
  "id":"Office 1",
  "type":["Office", "Model"],
  "class_name":["Office"],
  "published_at_dt":"2017-03-22T23:32:22Z",
  "id_i":1,
  "search_name_s":"atlanta",
  "region_id_i":2,
  "is_active_b":true,
  "postal_code_s":"30309",
  "abbreviation_s":"ATL",
  "person_ids_im":[513,
    571,
    1392,
    1722,
    1723],
  "supported_locales_sm":["en"],
  "slug_s":"houston",
  "name_text":["Houston"],
  "address_text":["1 Main Street<br/>Suite 1"],
  "city_text":["Houston"],
  "postal_area_text":["TX"],
  "_version_":1565750688671072256},

}

Я установил log_level на DEBUG, но оператор обновления SOLR мало что мне говорит.

SOLR Request (1.6ms)  [ path=update parameters={} ]

Я попытался войти в консоль Rails на производстве, вручную запустив

Sunspot.remove_all!(Office)

а затем запускаю мою индексную задачу, но поле все еще не подбирается.

Я не уверен, как дальше отлаживать эту проблему.

Является ли проблема в изменении, которое мне нужно внести в управляемую схему (в моем каталоге conf нет schema.xml, только файл управляемой схемы). Поле определено там, и выполнение запросов для этого поля работает, но возвращает 0 результатов.

Является ли проблема в том, что код Sunspot.setup в моем инициализаторе требует полной остановки Apache2 и Sunspot, чтобы принять мои изменения? Я тоже так пробовал, но изменений не увидел.

Или проблема в том, что я не использую включение Rails AR по умолчанию из-за немного другого варианта использования, который у нас есть, и отсутствуют методы, которые мне нужно реализовать в моем классе адаптера/индексируемого?

Любая помощь по этому вопросу будет принята с благодарностью.


person sparky    schedule 26.04.2017    source источник


Ответы (1)


Итак, после того, как я начал выяснять, почему обновленная конфигурация Sunspot не прижилась, кто-то предложил мне проверить, работает ли Spring в нашей производственной среде. По какой-то причине это мешало повторной инициализации новой конфигурации Sunspot. После уничтожения всех запущенных экземпляров Spring и повторного развертывания приложения новые изменения были приняты, и, похоже, все работает.

person sparky    schedule 28.04.2017