【问题标题】:Solr filter query for suggesterSolr 过滤器查询建议器
【发布时间】:2013-12-27 20:09:45
【问题描述】:

我正在使用 Solr Suggester 组件,并且想知道是否可以通过 fq 参数过滤结果。我有一个这样的查询:

http://localhost:8982/solr/core1/suggest?q=shirts&fq=category_id%3A321&wt=json&indent=true&spellcheck=true&spellcheck.build=true

在这里,我尝试为q=shirts 提供一些建议。我想通过fq=category_id:321 过滤这个,这样我就不会得到其他类别的建议。因为category_id:321 的类别没有任何与shirts 相关的产品,所以它不应该返回任何建议。但确实如此。当尝试搜索该建议时,它什么也找不到,因为“原始”搜索是使用 fq=... 参数过滤的。

我在这里找到了collate http://wiki.apache.org/solr/SpellCheckComponent#spellcheck.collate 的东西。它会整理我的结果,但也会返回对shirts 的建议。

所以我的问题是,Suggester(或基本上是 SpellCheckerComponent)是否知道 fq 参数,以及如何使用此参数来过滤建议(或在稍后阶段,拼写更正)。

编辑

我发现,“普通”拼写检查组件(例如 solr.IndexBasedSpellChecker 类)确实考虑了 fq 参数。我可以设置

   <str name="spellcheck.collate">true</str>
   <str name="spellcheck.collateExtendedResults">false</str>

并且在按特定类别 id 过滤时不返回对 shitr 的建议,其中关键字 shirt 不存在。

我想知道,为什么这不适用于建议组件。有什么想法吗?

【问题讨论】:

    标签: solr lucene autosuggest spelling search-suggestion


    【解决方案1】:

    我不这么认为,您需要以不同的方式看待这一点才能理解原因。您可能已经知道,SpellChecker 的操作基于根据您在配置中指定的字段构建的字典。

    默认 文本 solr.DirectSolrSpellChecker ...

    在索引期间应该构成您的字典的复制字段填充“文本”字段,因此是字典。 例子 :

    此时拼写检查器不知道该建议来自何处。

    所以使用排序规则你可以做得更好,你试过 &spellcheck=true&spellcheck.extendedResults=true&spellcheck.collat​​e=true 吗?这将确保建议有一些结果。

    spellcheck.extendedResults ,提供有关建议的其他信息,例如索引中的频率(命中),这可能会对您的逻辑有所帮助。

    【讨论】:

    • 感谢您的回答。 extendedResults 值是否考虑了 fq 值?假设,我按类别 1 过滤我的查询,建议者返回一些值,但 extendedResults 字段说,不,您当前的查询没有任何值?
    猜你喜欢
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多