我想过滤掉字段“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
也就是说,对于构面 A,我想保留除 A:a 之外的所有过滤器,对于构面 B,我想保留除 B:b 之外的所有过滤器,依此类推。
最明显的方法是进行 n 个查询(每个 n 个方面一个查询),但我不想这样做。
全局范围提供对每个文档的访问,然后您可以添加用于主查询的相同过滤器。
我举了一个全局范围的例子这个相关主题 https://stackoverflow.com/questions/26269604/elasticsearch-how-to-exclude-filter-from-aggregations
您能否就 post_filter 的性能问题提供任何反馈?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)