Elasticsearch多选面

时间:2014-08-05 01:50:35

标签: filter elasticsearch multi-select faceted-search facets

假设我们有以下文件:

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;它是一回事,它有同样的问题。

enter image description here

0 个答案:

没有答案