SOLR 过滤器查询与主查询
Posted
技术标签:
【中文标题】SOLR 过滤器查询与主查询【英文标题】:SOLR filter-query vs main-query 【发布时间】:2012-02-02 14:13:08 【问题描述】:SOLR docs,声明 过滤查询 与 主查询 不同,不会影响文档得分。谁能解释一下这到底是什么意思,最好举个例子。
谢谢。
【问题讨论】:
【参考方案1】:fq 用于固定的值列表。如果您在 q=sunroof+stereo 和 fq=Mustang 上搜索,则 solr 将对 q 参数进行文本分析,因为 q=sunroof+stereo 和 q=stereo+sunroof 将返回相同的结果集。但是当通过 fq 过滤搜索时,没有对 fq 参数进行分析,并且假定所有返回的文档都将与 fq 匹配,因此无需修改匹配文档的分数。
【讨论】:
【参考方案2】:FilterQuery 仅存储文档 ID。这使得将过滤器应用于包含/排除文档的速度非常快。这方面的一个很好的例子是根据国家、产品类型、可用性等从搜索中过滤产品时。
普通查询可以执行完全相同的功能,但它有一个非常复杂的评分系统来确定“相关性”。我相信文档表明评分仅在主查询上完成,而不是在过滤器查询上。这也应该会提高查询速度。
所以,我可以查询:
description:Kohler AND productType:Toilet
或者我可以查询:
description:Kohler
with a FQ of productType:Toilet
结果会相同,但分数会不同。此外,如果您在一天中收到许多针对 productType:Toilet
的不同查询,FilterQuery 将被缓存,从而使整体查询时间更快。
【讨论】:
因此,例如,如果在索引时“productType”上有术语提升,如果 productType 在 FilterQuery 而不是主 Query 中设置,则结果可以不同的排序,例如,如果它在 Query 中,具有较高 productType 分数的文档将位于顶部,而如果它位于 FilterQuery 中,则具有较高 productType 分数的文档可能位于底部,因为它位于 FilterQuery 中,因此未应用分数。我理解你的意思吗? 正确。但是,如果您将 productType 作为 AND 子句放在主查询中,则无论如何您都不会返回任何其他 productTypes。所以这可能价值有限。但是,您所说的意味着您了解它的工作原理。 是的,你说得有道理,因为我错误地假设 productType 也有 FTS(因此可能会返回多个 productType,但 *Type 通常没有 FTS)。谢谢。 我想当您对具有不同分数的字段进行 OR'ed 子查询的复合查询时,此评分将是相关的。以上是关于SOLR 过滤器查询与主查询的主要内容,如果未能解决你的问题,请参考以下文章