Эластичный поиск: количество элементов с query_string - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь использовать агрегирование кардинальности поверх строки запроса.Я новичок в поиске Elastic и обнаружил некоторые ошибки.

Каждый документ выглядит примерно так -

{
   name: 'Jon Doe'
   customId: 'x123yz'
   prevAddressMap : {'NY':'2nd St', 'DC':'1st St', 'Chicago':'1st St' ... }
},
{ ...
},
.....

У меня есть запрос, чтобы получить все нужные мне записи -

{'query':{'query_string':{'fields':['prevAddressMap.*'],'query': '1st St'}}}

Я хочу посчитать все записи с уникальными именами.Итак, я попытался использовать для этого количество элементов -

{
  "query": {
    "query_string": {
      "fields": [
        "prevAddressMap.*"
      ],
      "query": "1st St"
    }
  },
  "aggs": {
    "distinct_count": {
      "filter": {
        "query": {
          "query_string": {
            "fields": [
              "prevAddressMap.*"
            ],
            "query": "1st St"
          }
        }
      },
      "aggs": {
        "snapId_count": {
          "cardinality": {
            "field": "customId"
          }
        }
      }
    }
  }
}

Я получаю ошибку: -

elasticsearch.exceptions.RequestError: RequestError(400, 'parsing_exception', 'no [query] registered for [query]')

Может кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 28 июня 2019

Ошибка связана с тем, как вы применили фильтр агрегирования .Правильный способ реализации агрегации:

"aggs": {
  "distinct_count": {
    "filter": {
      "query_string": {
        "fields": [
          "prevAddressMap.*"
        ],
        "query": "1st St"
      }
    },
    "aggs": {
      "snapId_count": {
        "cardinality": {
          "field": "customid"
        }
      }
    }
  }
}

Во-вторых, поскольку вы уже использовали запрос для фильтрации документов, вам больше не требуется добавлять его в агрегацию.Агрегация работает в итоговых документах запроса.Поэтому следующий общий запрос будет работать:

{
  "query": {
    "query_string": {
      "fields": [
        "prevAddressMap.*"
      ],
      "query": "1st St"
    }
  },
  "aggs": {
    "distinct_count": {
      "cardinality": {
        "field": "customId"
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...