В проекте Python у меня есть эластичный поисковый индекс, который выдает следующую ошибку при сортировке по заданному полю: elasticsearch.exceptions.RequestError: RequestError(400, 'search_phase_execution_exception', 'Fielddata is disabled on text fields by default. Set fielddata=true on [my_field] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.')
Первоначально это было текстовое поле, поэтому я сделал то, что рекомендовано в сообщении, ипопытался изменить его на поле ключевого слова или установить fielddata = True.К сожалению, эти изменения по-прежнему приводят к точно так же сообщению об ошибке, и теперь я в замешательстве.
Вот различные способы, которыми я пытался определить поле в моем индексе документа.Все приводят к одной и той же ошибке.
from elasticsearch_dsl import DocType, Index, field, Keyword
class MyDoc(DocType):
my_field = field.Text(fields={'raw': field.Keyword()})
my_field = field.Keyword(fielddata=True)
my_field = field.Keyword()
my_field = Keyword()
my_field = Keyword(fields={'raw': field.Keyword()})
Мое сопоставление индекса:
{
my-index: {
mappings: {
doc: {
properties: {
code: {
type: "text",
fields: {
keyword: {
type: "keyword",
ignore_above: 256
}
}
},
my_field: {
type: "text",
fields: {
keyword: {
type: "keyword",
ignore_above: 256
}
}
}
}
}
}
}
}
Мой запрос:
{'query': {'bool': {'filter': [{'bool': {'must_not': [{'terms': {'code': []}}]}}]}}, 'sort': ['my_field'], 'from': 0, 'size': 6}