3

我正在使用 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.collat​​e。它整理了我的结果,但也返回了shirts.

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

编辑

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

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

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

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

4

1 回答 1

1

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

默认文本 solr.DirectSolrSpellChecker ...

并且应该在索引期间构成您的字典的复制字段填充“文本”字段,从而填充字典。例子 :

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

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

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

于 2013-12-10T15:01:34.873 回答