小编典典

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

elasticsearch

我想过滤出字段“ A”等于“ a”的文档,并且我想同时考虑字段“
A”,当然不包括先前的过滤器。我知道您可以将过滤器“置于查询之外”,以便在不应用该过滤器的情况下获得构面,例如:

elasticsearch

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

单反

&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

也就是说,对于方面AI,希望保留除A:a以外的所有过滤器,对于方面B希望保留除B:b以外的所有过滤器,依此类推。最明显的方法是执行n个查询(n个方面中的每一个),但是我想避免这样做。


阅读 317

收藏
2020-06-22

共1个答案

小编典典

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

您能提供有关post_filter性能问题的任何反馈吗?

2020-06-22