Я пытаюсь внедрить Elasticsearch для частичного поиска по моим полям.Я создал приложение Rails, используя Mongodb для базы данных.Я реализовал Elasticsearch и могу успешно искать полный текст.Однако я готов внести изменения для частичного поиска.
После настройки, установленной в моем приложении:
Gemfile:
gem 'mongoid', '~> 6.0'
gem 'mongoid-elasticsearch'
app / models / post.rb
class Post
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Elasticsearch
elasticsearch!({
index_name: 'post_indexes',
prefix_name: false,
index_options: {
filter:{
autocomplete_filter:{
type: "edge_ngram",
min_gram: 3,
max_gram: 20
}
},
analyzer:{
autocomplete:{
type: "custom",
tokenizer: "standard",
filter: [
"lowercase",
"autocomplete_filter"
]
}
}
},
index_mappings: {
posts:{
properties:{
title: { type: 'string', index: :not_analyzed },
content: { type: 'string' }
}
}
},
wrapper: :load
})
field :title, type: String
field :content, type: String
end
Здесьэто ссылка Я следую.
Обновление 1
Вот что я попробовал в отображениях:
title: { type: 'string', index: :not_analyzed, analyzer: "autocomplete" },
Но все же я неполучить O / P.Я также обновил индекс, используя Post.es.index.refresh
Обновление 2
Вот что я пытался решить ошибку:
Elasticsearch::Transport::Transport::Errors::BadRequest: [400] {"error":"MapperParsingException[mapping [post]]; nested: MapperParsingException[Analyzer [autocomplete] not found for field [title]]; ","status":400}
elasticsearch!({
index_name: 'mongo_post_indexes',
prefix_name: false,
index_options: {
settings: {
index:{
analysis:{
filter:{
autocomplete_filter:{
type: "ngram",
min_gram: 1,
max_gram: 20
}
},
analyzer:{
autocomplete:{
type: "custom",
tokenizer: "standard",
filter: [
"lowercase",
"autocomplete_filter"
]
}
}
}
}
},
mappings: {
"posts" => {
properties: {
title: {type: 'text', boost: 10, analyzer: 'autocomplete'},
tags: {type: 'string', analyzer: 'autocomplete'}
}
}
}
},
wrapper: :load
})