2013-12-10 90 views
3

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

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的建议。

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

EDIT

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

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

和由某一类别ID,其中该关键字shirt不存在过滤时,不返回shitr的建议。

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

回答

1

我不这么认为,你需要看看这个有点不同,理解为什么。正如您可能已经知道的那样,SpellChecker基于您在配置中指定的字段构建的字典进行操作。

默认 文本 solr.DirectSolrSpellChecker ...

和复制领域应该化妆索引期间你的字典填补“文本”字段,因此字典。例如:

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

所以与整理,你可以做的更好一点,你有没有尝试&拼写检查=真& spellcheck.extendedResults =真& spellcheck.collat​​e =真的吗?这将确保建议有一些结果。

spellcheck.extendedResults,提供有关建议的其他信息,如索引中的频率(点击),这可能会帮助您进行逻辑处理。

+0

感谢您的回答。 'extendedResults'值是否考虑了'fq'值?比方说,我按类别1过滤我的查询,建议者返回一些值,但是'extendedResults'字段表示,不存在您当前查询的任何值吗? – 23tux