Solr的Facet Fields和Filter Queries的区别

9

我正在使用SolrMeter来测试Apache Solr搜索引擎。Facet字段和Filter查询之间的区别对我来说不是很清楚。SolrMeter教程将此列为Facet字段的示例:

content
category
fileExtension

以下是关于Filter查询的示例:

这是一个Filter查询的示例:

category:animal

category:vegetable
categoty:vegetable price:[0 TO 10] 
categoty:vegetable price:[10 TO *] 

我很难理解这个问题。有没有人可以举例说明一下?我能否在不指定facets或filters的情况下使用SolrMeter?

2个回答

15

Facet字段用于获取有关返回文档的统计信息,具体来说,针对该字段的每个值,返回了多少个具有该字段值的文档。例如,如果您有10个匹配“软垫子”查询的产品,如果您将其分为“产地”,则可能会得到6个文档为“俄克拉荷马州”和4个为“德克萨斯州”。Facet字段查询将给出数字6和4。

另一方面,过滤器查询用于通过添加另一个约束条件来过滤返回的结果。需要记住的是,在过滤结果时使用的查询不会影响文档的评分或相关性。例如,您可能会在索引中搜索产品,但只想返回受地理区域或其他限制约束的结果。


谢谢!这是一个很好的解释。您认为分面和过滤查询会增加查询的总搜索时间吗? - Cola
1
不客气。他们必须添加一点时间——这很容易进行基准测试和测试 :) 根据过滤器的复杂性,可能需要一些时间。在实现中,聚合应该相当简单,不应该增加太多时间。 - Ansari
2
并非绝对正确,过滤查询会被缓存和优先处理,因此重复的过滤器可以减少搜索时间。http://wiki.apache.org/solr/SolrCaching#Types_of_Caches_and_Example_Configuration - sclarson

2
一个facet是文档的一个字段(类型),所以类别是该字段。正如Ansari所说,facets用于获取统计信息并提供分组功能。您可以在“category”字段上应用分组,以显示所有“vegetable”作为一组。
编辑:有关在特定字段内搜索的部分是错误的。它不会仅在字段内搜索。它应该是“向搜索添加约束条件”。
执行category:vegetable的过滤查询将在文档的category字段中搜索vegetable,而不是其他字段。它用于仅搜索特定字段,而不是每个字段。有时,您只知道想要的术语在一个字段中,因此可以仅搜索该字段。

"它用于仅搜索特定字段而非每个字段。" 我有些困惑,因为安萨里说的似乎与这个陈述相矛盾。“另一方面,过滤器查询用于通过添加另一个约束条件来过滤返回的结果。” 这样是指从搜索结果中筛选特定字段,还是只在特定字段中搜索查询? - Cola
我相信Ansari是正确的,因为它们是另一个约束条件。这更有意义,因为过滤器可以为其他查询缓存,而且您可以拥有相当复杂的过滤器(例如范围)。 - firelore
抱歉打断一下,但是firelore您的回答在许多方面都是不准确的。首先,分组(折叠)和分面是完全不同的东西。其次,您可以以完全相同的方式在主查询中搜索单个字段。 - Ansari
我承认自己在两个方面都被纠正了。在分组部分上,我的理解是完全错误的。 以下是需要查看的相关部分: http://wiki.apache.org/solr/SolrFacetingOverview http://wiki.apache.org/solr/CommonQueryParameters#fq - firelore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接