Вложенный поиск эластичного поиска пуст - PullRequest
0 голосов
/ 24 апреля 2020

Итак, у меня есть индекс в Elasticsearch 7.6, в котором есть документы, подобные этому:

{
  "_index": "my-index",
  "_type": "_doc",
  "_id": "kjdskjwolsjj",
  "_version": 1,
  "_score": null,
  "_source": {
    "timestamp": "2018-04-22T20:11:35.0292586Z",
    "batchId": "9c96d360-5549-4b3b-85c8-756330117bad",
    "userId": "id-001-001",
    "things": [
      {
        "id": 650055867,
        "name": "green",
      },
      {
        "id": 523,
        "name": "eggs",
      },
      {
        "id": 1269,
        "name": "ham",
      }
    ]
  }
}

Конечно, это всего лишь один из многих документов в индексе. Я хотел бы создать совокупную совокупность всех «вещей» в моем индексе, чтобы можно было разбивать совокупную совокупность по этому сегменту.

Мой агг запрос выглядит так:

{
  "aggs": {
    "all_things": {
      "nested": {
        "path": "_source.things"
       }
     }
   }
}

(Кстати ... если я использовал просто «вещи» в качестве вложенного пути, он жалуется «[вложенный] вложенный путь [вещи]» не является вложенным ".)

Наконец, результат (с использованием консоли Kibana):

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1408,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "all_things" : {
      "doc_count" : 0
    }
  }
}

Может кто-нибудь объяснить, почему в моем ведре нет документов? Или, может быть, достойный способ создать ведро со всеми моими "вещами"?

Спасибо.

1 Ответ

0 голосов
/ 24 апреля 2020

Вы должны проиндексировать ваш things как nested:

PUT my-index
{
  "mappings": {
    "properties": {
      "things": {
        "type": "nested"
      }
    }
  }
}

POST my-index/_doc
{
  "timestamp": "2018-04-22T20:11:35.0292586Z",
  "batchId": "9c96d360-5549-4b3b-85c8-756330117bad",
  "userId": "id-001-001",
  "things": [
    {
      "id": 650055867,
      "name": "green"
    },
    {
      "id": 523,
      "name": "eggs"
    },
    {
      "id": 1269,
      "name": "ham"
    }
  ]
}

Тогда и только тогда ваши вложенные агги будут работать:

GET my-index/_search
{
  "size": 0,
  "aggs": {
    "things_ids": {
      "nested": {
        "path": "things"
      },
      "aggs": {
        "things_ids": {
          "cardinality": {
            "field": "things.id"
          }
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...