#elasticsearch #mapping
#elasticsearch #сопоставление
Вопрос:
Я создаю способ поиска слов на тайском языке с помощью Elasticsearch и Kibana. У меня проблема с сопоставлением.
PUT test
{
"settings": {
"analysis": {
"analyzer": {
"trigrams": {
"tokenizer": "trigram_tokenizer",
"filter": [
"lowercase"
]
}
},
"tokenizer": {
"trigram_tokenizer": {
"type": "ngram",
"min_ngram": 3,
"max_ngram": 3,
"token_chars": []
}
}
}
},
"mappings": {
"true_name": {
"properties": {
"correct": { "type": "text", "analyzer": "trigrams" }
}
}
}
}
и ошибка, подобная этой
{
"error" : {
"root_cause" : [
{
"type" : "mapper_parsing_exception",
"reason" : "Root mapping definition has unsupported parameters: [true_name : {properties={correct={analyzer=trigrams, type=text}}}]"
}
],
"type" : "mapper_parsing_exception",
"reason" : "Failed to parse mapping [_doc]: Root mapping definition has unsupported parameters: [true_name : {properties={correct={analyzer=trigrams, type=text}}}]",
"caused_by" : {
"type" : "mapper_parsing_exception",
"reason" : "Root mapping definition has unsupported parameters: [true_name : {properties={correct={analyzer=trigrams, type=text}}}]"
}
},
"status" : 400
}
Ответ №1:
Типы сопоставления устарели. Обратитесь к этой документации, чтобы узнать больше об удалении типов сопоставления.
Индексы, созданные в Elasticsearch 6.0.0 или более поздней версии, могут содержать только один тип сопоставления. Индексы, созданные в 5.x с несколькими типами сопоставления, будут продолжать функционировать, как и раньше, в Elasticsearch 6.x. Типы будут устаревшими в API в Elasticsearch 7.0.0 и полностью удалены в 8.0.0.
{
"settings": {
"analysis": {
"analyzer": {
"trigrams": {
"tokenizer": "trigram_tokenizer",
"filter": [
"lowercase"
]
}
},
"tokenizer": {
"trigram_tokenizer": {
"type": "ngram",
"min_ngram": 3,
"max_ngram": 3,
"token_chars": []
}
}
}
},
"mappings": { // note this
"properties": {
"correct": {
"type": "text",
"analyzer": "trigrams"
}
}
}
}
Если ваш документ JSON выглядит следующим образом:
{
"true_name": {
"correct": "mapping types deprecated"
}
}
Тогда сопоставление индексов будет —
{
"settings": {
"analysis": {
"analyzer": {
"trigrams": {
"tokenizer": "trigram_tokenizer",
"filter": [
"lowercase"
]
}
},
"tokenizer": {
"trigram_tokenizer": {
"type": "ngram",
"min_ngram": 3,
"max_ngram": 3,
"token_chars": []
}
}
}
},
"mappings": {
"properties": { // note this
"true_name": {
"properties": {
"correct": {
"type": "text",
"analyzer": "trigrams"
}
}
}
}
}
}