使用qf =和defType = edismax参数在sunspot / solr上获得超过精确字段匹配结果的难度

时间:2017-06-18 16:19:01

标签: ruby-on-rails search solr sunspot

我们PublicLab.org非常欣赏Sunspot,并且正在将其部署到生产环境中。

我们的测试和开发是使用sunspot_solr(2.2.6)gem中的嵌入式Solr引擎完成的。

现在我们正在使用Solr 5.3容器(如https://hub.docker.com/_/solr/中所示)。在这种情况下,默认的Sunspot查询是not working well in the Solr service,具体来说,参数qf=title_text+body_text+comment_textdefType=edismax(两者都是由我们的Rails应用程序Node.search中的太阳黑子生成的默认值查询)导致Solr只返回一些结果,而不返回其他结果。它似乎只返回标题字段的精确,区分大小写的匹配。例如:

但调整这些生产参数 - 如详细in this pull request,当它在生产环境(容器化Solr)中返回完整结果时,会导致结果在开发中中断(来自{{1}的嵌入式Solr引擎)宝石)。

所以,要么我们需要

a)弄清楚为什么看似格式正确的太阳黑子生成的查询只匹配确切的标题文本并改变它,或者

b)弄清楚为什么我们对查询的手动编辑在嵌入式(太阳黑子宝石)Solr中什么都没有返回

我们还发布了太阳黑子问题跟踪器:https://github.com/sunspot/sunspot/issues/863

感谢您提供任何可能的帮助!

2 个答案:

答案 0 :(得分:0)

Ex configurations for the field text_general in your solr schema.xml: 

  <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

此处“审核”一词被索引为“审核”,所有查询都转换为小写。您也可以查看您的solr默认qf&amp; df params。

1.如果可以共享您的架构和solrconfig文件也会有所帮助。

2.使用debug = on从solr ui运行查询,这将完整地描述如何解析查询以及如何匹配结果。

答案 1 :(得分:0)

我们的(非)解决方案:我们最终切换到Rails上sunspot_solr gem中提供的嵌入式Solr,并使用容器化(和更新)Solr。这绕过了这个问题。