【发布时间】: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.org/guide/en/elasticsearch/reference/current/…)并为每个聚合构建一个过滤器,不包括不必要的过滤器(elasticsearch.org/guide/en/elasticsearch/reference/current/…)。
-
我似乎已经通过将范围聚合到
global然后为每个聚合选择适当的过滤器来解决它。
标签: elasticsearch faceted-search