【发布时间】:2017-10-17 20:18:24
【问题描述】:
我们正在 Heroku 上运行 Rails 应用程序,使用带有 Sidekiq 的 Websolr 插件来对索引作业进行排队。这已经工作了很长时间,但现在我们调整了schema.xml 以改进子字符串匹配等。
修改后的 schema.xml 在本地和 CI 上运行,但生产 Rails 应用程序没有使用它。
这是新架构文件的相关部分:
<fieldType name="text_substr" class="solr.TextField" omitNorms="false">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="10"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
<dynamicField name="*_substr" stored="false" type="text_substr" multiValued="true" indexed="true"/>
该字段用于索引模型的方式如下:
class Profile < ActiveRecord::Base
searchable do
text :name_similar_match, as: :name_substr do
name
end
end
end
这是我到目前为止所做的:
- 使用其网站上的配置选项卡将修改后的
schema.xml复制到 Websolr - 部署了使用新 Solr 字段的 Rails 代码
- 重新启动运行 Sidekiq 的 Heroku 工作程序,方法是将其缩放为 0,然后再次备份
当我尝试在生产环境中索引 Profile 时,索引作业失败并出现以下错误:
RSolr::Error::Http - 400 Bad Request Error: 'ERROR: [doc=Profile 1] unknown field \'name_substr\'','code'=>400
当我在开发中遇到这种事情时,重新启动 Sidekiq 以及 Solr 即可修复它;我已经在生产中重新启动了所有我能做的事情,但没有让它工作。
一个明显的线索是,生产 Sidekiq 仪表板显示其正常运行时间为 123 天,尽管 Heroku 工作器已重新启动。我已经搜索了文档,但我找不到任何实际上重新启动 Sidekiq 的方法。如果有人知道发生了什么,那么我真的很感激一些帮助:)
【问题讨论】:
标签: ruby-on-rails heroku sidekiq sunspot websolr