弹性搜索(2.4) - 搜索和聚合数组

时间:2017-02-02 14:29:04

标签: elasticsearch aggregate elasticsearch-aggregation elasticsearch-query nosql

我有一个映射为 -

的索引
GET /sampledesc/desc/_mapping
{
  "sampledesc": {
  "mappings": {
     "desc": {
        "properties": {
           "labels": {
              "type": "string",
              "index": "not_analyzed"
           },
           "tags": {
              "type": "string",
              "index": "not_analyzed"
           },
           "user_id": {
              "type": "long"
           }
        }
     }
  }
 }
}

我在其中添加了一些数据 -

PUT /sampledesc/desc/1
{
"user_id": 1,
"tags": ["tag1", "tag2", "tag3"],
"labels": ["label1","label2"]
}

PUT /sampledesc/desc/2
{
"user_id": 2,
"tags": ["tag2","tag3",],
"labels": ["label2","label4"]
}

PUT /sampledesc/desc/3
{
"user_id": 3,
"tags": ["tag7"],
"labels": ["label1","label4"]
}

我想使用以下规则查询此数据:

  1. 查找已提供标签列表的所有用户。
  2. 对于这些用户,请按计数对标签进行分组。
  3. 例如,我想查询同时具有tag2和tag3的用户,并按照排序顺序对标签进行分组。在三个用户的给定示例数据中,我的结果为label2 = 2; label1 = 1, label4 = 1

1 个答案:

答案 0 :(得分:1)

您好您可以使用以下查询

{
    "aggs": {
        "label_group": {
            "terms": {
                "field": "labels",
                "size": 10
            }
        }
    },
    "query": {
        "bool": {
            "must": [{
                "terms": {
                    "tags": [
                        "tag2"
                    ]
                }
            }, {
                "terms": {
                    "tags": [
                        "tag3"
                    ]
                }
            }]
        }
    }
}

希望这会有所帮助 感谢