2017-01-05 15 views
5

Имея это поле в моем отображенииElasticSearch 5,1 Fielddata отключен в текстовом поле по умолчанию [ОШИБКА: попытка использовать агрегацию на поле]

"answer": { 
     "type": "text", 
     "fields": { 
      "keyword": { 
      "type": "keyword", 
      "ignore_above": 256 
      } 
     } 
     }, 

я пытаюсь выполнить эту агрегацию

"aggs": { 
"answer": { 
    "terms": { 
    "field": "answer" 
    } 
}, 

но я получаю эту ошибку

"type": "illegal_argument_exception", 
     "reason": "Fielddata is disabled on text fields by default. Set fielddata=true on [answer] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory." 

Должен ли я изменить свое сопоставление или я использую неправильную агрегацию? (Просто обновлен с версии 2.x до 5.1)

ответ

13

Вам необходимо агрегировать на keyword подполе, как это:

"aggs": { 
"answer": { 
    "terms": { 
    "field": "answer.keyword" 
    } 
}, 

Это будет работать.

1

Добавление @ ответ Val, вы можете также установить fielddata к истинным во время самого вашего отображения:

"answer": { 
     "type": "text", 
     "fielddata": true, <-- add this line 
     "fields": { 
      "keyword": { 
      "type": "keyword",     
      "ignore_above": 256 
      } 
     } 
     }, 
+0

Я не уверен, что тип ['ключевое слово] (https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html) фактически принимает любую настройку 'fielddata', как это делает тип' text'. – Val

+0

В соответствии с исключением ('Set fielddata = true on [answer]'), я думал, что проблема связана с ответом '' 'в предоставленном сопоставлении. – Kulasangar

+0

Это потому, что он агрегировался на 'answer', но он лучше агрегировал на' answer.keyword', так как у него есть это поле. – Val

1

В Aggregation, просто добавьте ключевое слово answer.It работал для меня. Для текстовых полей нам нужно добавить ключевое слово. «поле»: «answer.keyword»

+0

уже решён, ответственный @Val –