#ruby-on-rails #elasticsearch #elasticsearch-plugin
#ruby-on-rails #elasticsearch #elasticsearch-плагин
Вопрос:
Я использую elasticsearch-rails gem в своем приложении Rails для упрощения интеграции с Elasticsearch. Я пытаюсь использовать плагин фонетического анализа, поэтому мне нужно определить пользовательский анализатор и пользовательский фильтр для моего индекса.
Я попробовал этот фрагмент кода для выполнения пользовательского анализа с помощью фонетического фильтра soundex, но он завершается ошибкой с сообщением об исключении:
[!!!] Ошибка при создании индекса: Elasticsearch::Транспорт::Транспорт::Ошибки::BadRequest [400] {«ошибка»:»MapperParsingException[сопоставление [call_sentence]]; вложенный: MapperParsingException[Анализатор [{tokenizer=standard, filter= [стандартный, строчный, метафонер]}] не найдендля поля [фонетический]]; «,»статус»: 400}
# Set up index configuration and mapping
#
settings index: { number_of_shards: 1, number_of_replicas: 0 } do
mapping do
indexes :text, type: 'multi_field' do
indexes :processed, analyzer: 'snowball'
indexes :phone, {analyzer: {
tokenizer: "standard",
filter: ["standard", "lowercase", "metaphoner"]
}, filter: {
metaphoner: {
type: "phonetic",
encoder: "soundex",
replace: false
}
}}
indexes :raw, analyzer: 'keyword'
end
end
end
Ответ №1:
Вы также можете указать его в вызове настроек:
settings index: {
number_of_shards: 1,
number_of_replicas: 0,
analysis: {
filter: {
metaphoner: {
type: 'phonetic',
encoder: doublemetaphone,
replace: true,
}
},
analyzer: {
phonetic_analyzer: {
tokenizer: 'standard',
filter: ["standard", "lowercase", "metaphoner"],
}
}
}
} do
mapping do
indexes :text, type: 'multi_field' do
indexes :processed, analyzer: 'snowball'
indexes :phone, analyzer: 'phonetic_analyzer'
indexes :raw, analyzer: 'keyword'
end
end
end
Ответ №2:
Хорошо, я изменил конфигурацию elasticsearch.yml, чтобы включить фонетический анализатор
#################################### Index ####################################
index:
analysis:
analyzer:
phonetic_analyzer:
tokenizer: standard
filter: [metaphoner]
filter:
metaphoner:
type: phonetic
encoder: doublemetaphone
replace: true