RemoteTransportException, Fielddata отключается в текстовых полях при выполнении агрегации в текстовом поле
Я перехожу с 2.x на 5.x Я добавляю значения в индекс, как это
indexInto (indexName / indexType) id someKey source foo
Однако я также хотел бы получить все значения по полю:
def getValues(tag: String) ={
client execute {
search(indexName / indexType) query ("_field_names", tag) aggregations (termsAggregation( "agg") field tag size 1)
}
Но я получаю это исключение:
RemoteTransportException [[8vWOLB2] [172.17.0.5:9300] [индексы: данные / чтение / поиск [фаза / запрос]]]; nested: IllegalArgumentException[Fielddata отключен для текстовых полей по умолчанию. Установите fielddata=true на [my_tag], чтобы загрузить полевые данные в память, инвертировав инвертированный индекс. Обратите внимание, что для этого может потребоваться значительная память.];
Я думаю, может быть, использовать keyword
как показано здесь, но поля не известны заранее (отправлено пользователем), поэтому я не могу использовать сопоставления perpend
1 ответ
По умолчанию все неизвестные поля будут проиндексированы / добавлены в asticsearch в виде текстовых полей, которые не указаны в отображениях. Если вы посмотрите на сопоставления такого поля, вы увидите, что поле включено для таких полей с типом "ключевое слово", и эти поля проиндексированы, но не проанализированы.
GET new_index2/_mappings
{
"new_index2": {
"mappings": {
"type": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
так что вы можете использовать значения полей для текстовых полей для агрегатов, как показано ниже
POST new_index2/_search
{
"aggs": {
"NAME": {
"terms": {
"field": "name.fields",
"size": 10
}
}
}
}
Проверьте name.fields
Таким образом, ваш запрос Scala может работать, если вы можете перейти к значению поля.
def getValues(tag: String) = {
client.execute {
search(indexName / indexType)
.query("_field_name", tag)
.aggregations {
termsAgg("agg", "field_name.fields")
}.size(1)
}
}
Надеюсь это поможет. Спасибо