3

我们正在 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 的方法。如果有人知道发生了什么,那么我真的很感激一些帮助:)

4

1 回答 1

1

Websolr 支持在这里!那个片段对我来说看起来不错。请注意,通过 Websolr 仪表板更新 schema.xml 将自动将更改部署到 Solr 并重新加载核心,因此无需重新启动任何内容。将更改推送到 Rails 应用程序应该足以开始使用新字段。

听起来您到目前为止所做的一切都应该有效。介意使用您的索引 URL 发送电子邮件以支持 -at-websolr.com 吗?我们会看看并确保没有其他事情发生。

于 2017-10-18T16:21:13.930 回答