ElasticSearch聚合:每个聚合排除一个过滤器

Ale*_*sov 7 faceted-search elasticsearch

我想过滤掉字段'A'等于'a'的文档,我想同时面对字段'A',当然不包括前一个过滤器.我知道您可以将过滤器放在查询"外部",以便在没有应用过滤器的情况下获取构面,例如:

ElasticSearch

{
   "query : { "match_all" : { } },  
   "filter" : { "term : { "A" : "a" } },
   "facets" : { 
      "A" : { "terms" : { "field" : "A" } }  //this should exclude the filter A:a
   }
}
Run Code Online (Sandbox Code Playgroud)

SOLR

&q=:*:*
&fq={!tag=Aa}A:a
&facet=true&facet.field={!ex=Aa}A
Run Code Online (Sandbox Code Playgroud)

这是非常好的,但如果我有多个过滤器和方面,每个过滤器应该相互排斥,会发生什么?例:

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
Run Code Online (Sandbox Code Playgroud)

也就是说,对于方面,AI希望保留除A:a之外的所有滤波器,对于小平面B除了B:b之外的其他所有滤波器,依此类推.最明显的方法是进行n个查询(每个n个方面各一个),但我想远离那个.

小智 2

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

我在这个相关主题中给出了一个具有全局范围的示例

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