У меня есть приложение Rails, использующее сервер ElasticSearch
, оба они находятся в соответствующем Docker Image.
Я бы хотел обновить свой сервер ElasticSearch. На самом деле я использую image: docker.elastic.co/elasticsearch/elasticsearch:6.8.1
, и я хотел бы обновить его до 7.X
В версии 7 я получаю эту ошибку при перестройке индекса:
{
"error": {
"root_cause": [
{
"type": "mapper_parsing_exception",
"reason": "Root mapping definition has unsupported parameters: [listing : {dynamic=true, properties={uid={analyzer=id_analyzer, type=text}, bee_id={analyzer=id_analyzer, type=text}, address={analyzer=address_analyzer, type=text}, location={type=geo_point}}}]"
}
],
"type": "mapper_parsing_exception",
"reason": "Failed to parse mapping [_doc]: Root mapping definition has unsupported parameters: [listing : {dynamic=true, properties={uid={analyzer=id_analyzer, type=text}, bee_id={analyzer=id_analyzer, type=text}, address={analyzer=address_analyzer, type=text}, location={type=geo_point}}}]",
"caused_by": {
"type": "mapper_parsing_exception",
"reason": "Root mapping definition has unsupported parameters: [listing : {dynamic=true, properties={uid={analyzer=id_analyzer, type=text}, bee_id={analyzer=id_analyzer, type=text}, address={analyzer=address_analyzer, type=text}, location={type=geo_point}}}]"
}
},
"status": 400
}
Я знаю, что ошибка вызвана критическим изменением, но я не знаю, как это исправить.
Я использую gem elasticsearch-model
:
Мое определение выглядит так:
settings :analysis => {
char_filter: {
dash_remover: {
type: "mapping",
mappings: ["-=>"]
}
},
filter: {
english_stemmer: {
type: "stemmer",
language: "english"
}
},
tokenizer: {
id_tokenizer: {
type: "ngram",
min_gram: 3,
max_gram: 3,
token_chars: ["letter", "digit"]
},
address_tokenizer: {
type: "edgeNGram",
min_gram: 3,
max_gram: 3,
token_chars: ["letter", "digit"]
}
},
analyzer: {
description_analyzer: {
type: 'custom',
tokenizer: 'standard',
filter: ['asciifolding', 'lowercase']
},
id_analyzer: {
tokenizer: "id_tokenizer",
char_filter: ["dash_remover"],
filter: ['asciifolding', 'lowercase']
},
english_description_analyzer: {
tokenizer: "whitespace",
char_filter: ["html_strip"],
filter: ['asciifolding', 'lowercase', "english_stemmer"]
},
address_analyzer: {
tokenizer: "address_tokenizer",
filter: ['asciifolding', 'lowercase']
},
}
}
mappings dynamic: true do
indexes :location, :type => 'geo_point'
indexes :uid, :analyzer => 'id_analyzer'
indexes :bee_id, :analyzer => 'id_analyzer'
indexes :address, :analyzer => 'address_analyzer'
end
end
Какие изменения я должен применить?