我想过滤出字段“ 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个方面中的每一个),但是我想避免这样做。
全局范围提供对每个文档的访问,然后可以添加用于主查询的相同过滤器。
您能提供有关post_filter性能问题的任何反馈吗?