简体   繁体   中英

Elastic Search query list with sublist

I have an index in Elastic that contains an array of keys and values.

For example - a single document looks like this:

{
  "_index": "my_index",
  "_source": {
    "name": "test",
    "values": [
      {
        "name": "a",
        "score": 10
      },
      {
        "name": "b",
        "score": 4
      },
      {
        "name": "c",
        "score": 2
      },
      {
        "name": "d",
        "score": 1
      }
    ]
  },
  "fields": {
    "name": [
      "test"
    ],
    "values.name.keyword": [
      "a",
      "b",
      "c",
      "d"
    ],
    "name.keyword": [
      "test"
    ],
    "values.score": [
      10,
      4,
      2,
      1
    ],
    "values.name": [
      "a",
      "b",
      "c",
      "d"
    ]
  }
}

I want to create an Elastic query (through API) that retrieves a sum of all the name scores filtered by a list of names.

For example, for the input: names = ['a', 'b'] The result will be: 14

Any idea how to do it?

You can di this by making values array nested . Example mapping:

{
  "mappings": {
    "properties": {
      "values": { "type": "nested" }
    }
  }
}

Following query will give the result you want:

{
  "size":0,
  "aggs": {
    "asd": {
      "nested": {
        "path": "values"
      },
      "aggs": {
        "filter_agg": {
          "filter": {
            "terms": {
              "values.name.keyword": [
                "a",
                "b"
              ]
            }
          },
          "aggs": {
            "sum": {
              "sum": {
                "field": "values.score"
              }
            }
          }
        }
      }
    }
  }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM