【问题标题】:ElasticSearch aggregation: exclude one filter per aggregationElasticSearch 聚合:每个聚合排除一个过滤器
【发布时间】:2014-12-11 13:46:57
【问题描述】:

我想过滤掉字段'A'等于'a'的文档,同时我想分面字段'A',当然排除前面的过滤器。 我知道您可以将过滤器放在查询的“外部”,以便在未应用该过滤器的情况下获取构面,例如:

弹性搜索

{
   "query : { "match_all" : { } },  
   "filter" : { "term : { "A" : "a" } },
   "facets" : { 
      "A" : { "terms" : { "field" : "A" } }  //this should exclude the filter A:a
   }
}

SOLR

&q=:*:*
&fq={!tag=Aa}A:a
&facet=true&facet.field={!ex=Aa}A

这很好,但是如果我有多个过滤器和构面,每个都应该相互排除,会发生什么? 示例:

filter=A:a
filter=B:b
filter=C:c

facet={exclude filter A:a}A
facet={exclude filter B:b}B
facet={exclude filter C:c}C

也就是说,对于 facet A,我想保留除 A:a 之外的所有过滤器,对于 facet B,我想保留除 B:b 之外的所有过滤器,依此类推。 最明显的方法是进行 n 次查询(每 n 个方面一个),但我不想这样做。

【问题讨论】:

标签: elasticsearch faceted-search


【解决方案1】:

全局范围提供对每个文档的访问,然后您可以添加用于主查询的相同过滤器。

我在this related topic中给出了一个全局范围的例子

您能否就 post_filter 的性能问题提供任何反馈?

【讨论】:

    猜你喜欢
    • 2015-09-17
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2018-06-24
    • 2015-07-12
    • 1970-01-01
    相关资源
    最近更新 更多