Как получить агрегирование терминов Elasticsearch для фильтрации полей с несколькими значениями тем же методом, что и фильтр aggs - PullRequest
0 голосов
/ 01 октября 2019

Я хочу создать запрос, чтобы дать мне все верхние виджеты в поле виджетов моего документа для работы с автозаполненным поиском. Это многозначное поле с токенайзером ключевых слов и токенайзером автозаполнения.

Проблема, с которой я сталкиваюсь с фильтрами сегментов так же, как это делает фильтр aggs.

Некоторые примеры данных,несколько документов, содержащих такие значения, как

виджеты ['Thingy', 'Whatsit', 'Thingyamybob', 'Big Thingy']

my-index/my-type/_search?pretty=true&typed_keys=true
{
  "aggs": {
    "filterAggs": {
      "filter": {
        "match": {
          "widgets": {
            "query": "t"  <- will filter all the docs that match the autocomplete filter.
          }
        }
      },
      "aggs": {
       "bucketAggs": {
          "terms": {
            "field": "widgets.keyword", <- Will bring back all the values in the matched docs, including the ones that didn't match, e.g. 'Whatsit'
            "include": "t.*",  <- This is the closest I've got but it's using regex and not the autocomplete filter.
            "size": 7
          }
        }
      }
    }       
  },
  "size": 0
}

Без "include": "t.*" я получаю все значенияв том числе несовпадающий «Whatsit». "include": "t.*" использует регулярное выражение, которое не совпадает с методом запроса на совпадение и даст другие результаты, оно чувствительно к регистру, не имеет сворачивания ASCII и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...