假设我们有以下文件:
curl -XPUT 'http://localhost:9200/multiselect/demo/1' -d '{
"title": "One",
"tags": ["tag1"],
"keywords": ["keyword1"]
}'
curl -XPUT 'http://localhost:9200/multiselect/demo/2' -d '{
"title": "Two",
"tags": ["tag2"],
"keywords": ["keyword2"]
}'
如果我们进行查询:
curl -XGET '
{
"post_filter": {
"and": [
{
"terms": {
"tags": [
"tag1",
"tag2"
]
}
},
{
"terms": {
"keywords": [
"keyword1"
]
}
}
]
},
"aggs": {
"tagFacet": {
"aggs": {
"aggs": {
"terms": {
"field": "tags",
"size": 0
}
}
},
"filter": {
"terms": {
"keywords": [
"keyword1"
]
}
}
},
"keywordFacet": {
"aggs": {
"aggs": {
"terms": {
"field": "keywords",
"size": 0
}
}
},
"filter": {
"terms": {
"tags": [
"tag1",
"tag2"
]
}
}
}
}
}
'
我们将有一份文件" One"以及facet列表:tag1 - 1,keyword1 - 1,keyword2 - 0和tag2 - 1,但实际上最后一个tag2不应该存在,因为我们的过滤器中没有关键字2的任何内容(和方面)。
问题是,是否有可能在没有tag2的情况下获得facet,而不是发出2个请求。
请告诉我,如果您需要更好的解释,但我想基本的想法应该是明确的。
PS。您可以在此处找到以下模式的更好解释:https://gist.github.com/mattweber/1947215;它是一回事,它有同样的问题。