Как заставить агрегаты работать для текстовых полей

Я пытаюсь написать запрос elasticsearch, чтобы получить уникальные города. мое ключевое слово locality_town_keyword имеет тип ключевого слова. когда я пытаюсь выполнить поиск по ключевому слову locality_town_keyword, я получаю результаты поиска, но ничего в «агрегациях»: «ведрах».

Вот как выглядит моя схема...

                "locality_town": {
                    "type": "text"
                },
                "locality_town_keyword": {
                    "type": "keyword"
                },

Мой поисковый запрос выглядит следующим образом

{ 
    "query": 
    {
        "prefix" : { "locality_town" : "m" }
    },
    "size": "1",
    "_source": {
        "includes": [
            "locality_town*"
        ]
    },
    "aggs": {
        "loc": {
            "terms": {
                "field": "locality_town_keyoword",
                "size": 5,
                "order": {
                    "_count": "desc"
                }
            }
        }
    }
}

Вот что он дает

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 799,
    "max_score": 1.0,
    "hits": [
      {
        "_index": "tenderindex_2",
        "_type": "tender_2",
        "_id": "290077",
        "_score": 1.0,
        "_source": {
          "locality_town": "Manchester",
          "locality_town_keyword": "Manchester"
        }
      }
    ]
  },
  "aggregations": {
    "loc": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": []
    }
  }
}

Так выглядит один документ

{
    "_index": "tenderindex_2",
    "_type": "tender_2",
    "_id": "290077",
    "_version": 1,
    "_seq_no": 39,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "title": "Legal Services",
        "buyers": "CENTRAL MANCHESTER UNIVERSITY HOSPITALS NHS FOUNDATION TRUST",
        "postal_code": "M13 0JR",
        "publish_date": "2015-03-03T15:48:45Z",
        "status": "cancelled",
        "start_date": "2017-03-03T00:00:00Z",
        "endt_date": "2020-03-03T00:00:00Z",
        "url": "https://www.temp.com",
        "country": "England",
        "description": "desc......",
        "language": "en-GB",
        "service": "OPEN_CONTRACTING",
        "value": "0",
        "value_currency": "GBP",
        "winner": "",
        "create_time": "2019-05-11T21:39:42Z",
        "deadline_date": "1970-01-01T00:00:00Z",
        "address": "Central Manchester University Hospitals NHS Foundation Trust Wilmslow Park",
        "locality_town": "Manchester",
        "locality_town_keyword": "Manchester",
        "region": "North West",
        "tender_type": "planning",
        "cpv": "Health services ",
        "strpublish_date": "2015-03-03T15:48:45Z",
        "strstart_date": "2017-03-03T00:00:00Z",
        "strend_date": "2020-03-03T00:00:00Z",
        "strdeadline_date": "",
        "winner_email": "",
        "winner_address": "",
        "winner_town": "",
        "winner_postalcode": "",
        "winner_phone": "",
        "cpvs": "[\"Health services (85100000-0)\"]"
    }
}

person Malik Khan    schedule 24.07.2019    source источник
comment
Ваш запрос выглядит хорошо, но ваше сопоставление, вероятно, нет. Не могли бы вы привести пример json-документа, который вы индексируете?   -  person Pierre-Nicolas Mougel    schedule 24.07.2019
comment
Спасибо за ваш комментарий, приятель. Я изменил схему, чтобы она была простой, чтобы изолировать проблему. Я также обновил это в вопросе выше. Также я предоставил один образец документа. Любая помощь приветствуется. Еще раз спасибо!   -  person Malik Khan    schedule 24.07.2019


Ответы (1)


Похоже, у вас опечатка в запросе агрегации:

"aggs": {
    "loc": {
        "terms": {
            "field": "locality_town_keyoword", <== here
            "size": 5,

Вместо этого попробуйте использовать locality_town_keyword!

Надеюсь это поможет!

person Nikolay Vasiliev    schedule 26.07.2019
comment
Большое спасибо за то, что указали на это, мне стыдно знать, что не так, и в то же время рад узнать, что это решило мою проблему и сделало мой день. - person Malik Khan; 01.08.2019
comment
@Malik Khan рад слышать, что ответ помог! Это часто происходит с запросами Elasticsearch. - person Nikolay Vasiliev; 06.08.2019