Как отображения эластичного поиска-рельса переводят в конфигурацию индекса эластичного поиска?
Я использую драгоценный камень asticsearch-rails (asticsearch-model), и меня немного смущает то, как model-dsl в конечном итоге переходит в конфигурацию индекса.
У меня есть следующий код для прямой установки индекса, и он работает нормально:
require 'elasticsearch'
client = Elasticsearch::Client.new log: true
# edge_ngram settings
settings_with_ngram = {
"analysis": {
"filter": {
"nGram_filter": {
"type": "nGram",
"min_gram": 3,
"max_gram": 8,
"token_chars": [
"letter",
"digit",
"punctuation",
"symbol"
]
}
},
"analyzer": {
"nGram_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding",
"nGram_filter"
]
},
"whitespace_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding"
]
}
}
}
}
# item
client.indices.delete index: "test_matchables"
client.indices.create index: "test_matchables", body: {
settings: settings_with_ngram,
mappings: {
matchable: {
"_all": {
"analyzer": "nGram_analyzer",
"search_analyzer": "whitespace_analyzer"
}
}
}
}
Однако, когда я (пытаюсь) сделать то же самое в модели, я получаю ошибку:
elasticsearch_settings = {
index: {
number_of_shards: 1,
number_of_replicas: 0
},
analysis: {
filter: {
nGram_filter: {
type: "nGram",
min_gram: 3,
max_gram: 8,
token_chars: [
"letter",
"digit",
"punctuation",
"symbol"
]
}
},
analyzer: {
nGram_analyzer: {
type: "custom",
tokenizer: "whitespace",
filter: [
"lowercase",
"asciifolding",
"nGram_filter"
]
},
whitespace_analyzer: {
type: "custom",
tokenizer: "whitespace",
filter: [
"lowercase",
"asciifolding"
]
}
}
}
}
settings(elasticsearch_settings) do
mappings do
indexes :_all, analyzer: 'nGram_analyzer', search_analyzer: 'whitespace_analyzer'
end
end
Сообщение об ошибке:
MapperParsingException[Failed to parse mapping [matchable]: Field [_all] is defined twice in [matchable]]; nested: IllegalArgumentException[Field [_all] is defined twice in [matchable]];
Было бы уже полезно, если бы я мог привести модель asticsearch (oder эластичный поиск), чтобы показать мне весь запрос, отправляемый в эластичный поиск при создании этого индекса.
Спасибо за любые предложения:)