私がしたいこと:
- 私はelasticsearchで検索したいタイトルと説明の2つのフィールドを持つモデル「アイテム」を持っています。
- 単語の一部を検索するようにします。例: bicycl は、bicycle、bicycle などと一致する必要があります。
現在の状況:
- 検索は完全一致のみを表示します
これが私のItemモデルに今あるものです:
include Tire::Model::Search
include Tire::Model::Callbacks
class << self
def search_index
Tire.index(Item.index_name)
end
end
settings :analysis => {
:filter => {
:my_ngram => {
"type" => "nGram",
"max_gram" => 10,
"min_gram" => 3 }
},
:analyzer => {
:my_analyzer => {
"type" => "custom",
"tokenizer" => "standard",
"filter" => ["my_ngram"]
}
}
} do
mapping do
indexes :title, boost: 10, analyzer: 'my_analyzer'
indexes :description, boost: 5, analyzer: 'my_analyzer'
end
end
def self.search(query_string)
tire.search(load: true) do
if query_string.present?
query do
string query_string, default_operator: "AND"
end
end
end
end