我正在使用Sunspot Solr(2.2.7)在我们的应用程序中搜索和索引AR模型,但我们在这里做的有点不同。实际的可索引内容存储在序列化字段中,我扩展了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
一切似乎都在开发和生产(运行Solr 6.4.2的Ubuntu 16.04)。
当我需要向索引添加新字段并尝试将此更改投入生产时,我遇到的问题就出现了。当我将上面的行添加到Sunspot.setup块
时integer :department_ids, multiple: true
到Office的设置并重新编制索引,它可以在我的本地计算机上运行,但是当我部署到生产环境时,新字段无法获取。
我已经更新了托管架构文件以包含新字段,但在重新索引模型之后,当我在查询工具中查询办公室时,我仍然看不到新字段。
正在返回的Office的示例JSON响应类似于:
{
"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 include,因为我们的用例略有不同,而且我需要在我的适配器/索引类中实现缺少的方法?
对此的任何帮助将不胜感激。
答案 0 :(得分:0)
因此,在为什么更新的Sunspot配置没有抓住之后,有人建议我检查Spring是否在我们的生产环境中运行。出于某种原因,它确实阻止了新的Sunspot配置重新初始化。在杀死所有正在运行的spring实例并重新部署应用程序之后,新的更改被拾取并且事情似乎正在起作用。