Я использую 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 по умолчанию из-за немного другого варианта использования, который у нас есть, и отсутствуют методы, которые мне нужно реализовать в моем классе адаптера/индексируемого?
Любая помощь по этому вопросу будет принята с благодарностью.