我们正在 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
在生产中索引 a 时,索引作业失败并出现以下错误:
RSolr::Error::Http - 400 Bad Request Error: 'ERROR: [doc=Profile 1] unknown field \'name_substr\'','code'=>400
当我在开发中遇到这种事情时,重新启动 Sidekiq 以及 Solr 即可修复它;我已经在生产中重新启动了所有我能做的事情,但没有让它工作。
一个明显的线索是,生产 Sidekiq 仪表板显示其正常运行时间为 123 天,尽管 Heroku 工作人员已重新启动。我搜索了文档,但找不到任何实际重新启动 Sidekiq 的方法。如果有人知道发生了什么,那么我真的很感激一些帮助:)