Solr过滤器查询建议者

时间:2013-12-10 10:42:47

标签: solr lucene autosuggest spelling search-suggestion

我正在使用Solr建议器组件,并且想知道,结果是否可以通过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。它会整理我的结果,但也会返回solr.IndexBasedSpellChecker的建议。

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

修改

我发现,“普通”拼写检查组件(例如,使用类fq)确实考虑了 <str name="spellcheck.collate">true</str> <str name="spellcheck.collateExtendedResults">false</str> 参数。我可以设置

shitr

并且按特定类别ID进行过滤时,不会返回shirt的建议,其中关键字{{1}}不存在。

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

1 个答案:

答案 0 :(得分:1)

我不这么认为,你需要对此有所不同,以了解原因。您可能已经知道,SpellChecker基于您在配置中指定的字段构建的字典进行操作。

  默认   文本   solr.DirectSolrSpellChecker   ...

在索引编制期间应该构成字典的复制字段填充“text”字段,从而填充字典。  示例:            

此时拼写检查器不知道该建议的来源。

所以通过整理你可以做得更好,你试过&amp; spellcheck = true&amp; spellcheck.extendedResults = true&amp; spellcheck.collat​​e = true?这将确保建议有一些结果。

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