如何在同一字段上聚合:在elasticsearch中查询中指定的值

时间:2018-01-25 08:55:40

标签: elasticsearch elasticsearch-aggregation elasticsearch-query

所以我在elasticsearch中的数据看起来像这个整个字典,一个人id等于一个doc,它包含对象列表,如

`{
  "dummy_name": "abc",
  "dummy_id": "44850642"
}`

如下所示,事情是我在字段dummy_id上查询,我得到的结果是一些不。匹配查询结果,我想在dummy_id字段聚合,所以我不会得到特定dummy_id的文档,但发生了什么,我也得到dummy_id的桶在查询中未提及的人自身包含dummy_id所在的对象列表。

`{
  "person_id": 1234,
  "Properties": {
    "Property1": [
      {
        "dummy_name": "abc",
        "dummy_id": "44850642"
      },
      {

      },
      {

      }
    ]
  }
},
{
  "person_id": 1235,
  .........
}`

使用以下方式查询Iam:

`{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "Properties.Property1.dummy_id": "453041 23234324 124324 "
          }
        }
      ]
    }
  },
  "aggregations": {
    "group_by_concept": {
      "terms": {
        "field": "Properties.Property1.dummy_id",
        "order": {
          "_count": "desc"
        },
        "size": 10
      }
    }
  }
}`

1 个答案:

答案 0 :(得分:0)

即将出现的问题是如何保存数据。 例如,在本文件中

{
  "person_id": 1234,
  "Properties": {
    "Property1": [
      {
        "dummy_name": "abc",
        "dummy_id": "44850642"
      },
      {
        "dummy_name": "dfg",
        "dummy_id": "876468"
      },
      {

      }
    ]
  }
}

本文档中生成的令牌将是

  • Dummy id令牌 - 44850642,876468。这是Lucene后端保存数据的方式

所以当您查询dummy_id时:44850642

您将获得该文档,但聚合会聚合与查询匹配的文档生成的术语

因此,你会看到44850642以及876468的桶。

有关elasticsearch如何保存对象列表数据的更多信息,请点击链接 - https://www.elastic.co/guide/en/elasticsearch/reference/current/array.html