私のレールアプリで製品を検索するためにelasticsearch-railsとelasticsearch-model gemを使用しています。
検索の大文字と小文字を区別しないようにしたいので、複数形に依存しないようにする必要があります。私はグーグルで多くのことを調査しましたが、アナライザーを使用してそれを行う方法についての予感を得ましたが、成功しませんでした. そのため、新しい質問を投稿する必要がありました。
これが、検索したい私の製品モデルです
class Product < ActiveRecord::Base
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks
belongs_to :category
belongs_to :sub_category
has_many :variations
settings index: { number_of_shards: 1 } do
mappings dynamic: 'false' do
indexes :name, analyzer: 'snowball'
indexes :description, analyzer: 'snowball'
indexes :category, analyzer: 'snowball'
end
end
def as_indexed_json(options={})
as_json(only: [:name, :description, :brand, :color, :make, :style, :gender],
include: { category: { only: :name}, sub_category: {only: :name}}
)
end
def self.search(query)
__elasticsearch__.search({
query: { query_string: {
query: query,
default_operator: "AND"
}},
})
end
end
- 私の質問は、複数形に関係なく検索するにはどうすればよいですか?
- Tシャツ、Tシャツ、Tシャツはすべて一致する必要があります。
とりわけ、以下に示す次のブロックの説明は見つかりませんでした
settings index: { number_of_shards: 1 } do
mappings dynamic: 'false' do
indexes :name, analyzer: 'snowball', index_options: 'offsets'
indexes :description, analyzer: 'snowball'
indexes :category, analyzer: 'snowball'
end
end
検索のためのこのブロックの正確な目的は何ですか。
mappings dynamic: 'false' とはどういう意味ですか?
インデックス :name、アナライザー: 'snowball'、index_options: 'offsets' とはどういう意味ですか?
このブロックに追加できる他のオプションは何ですか。少し説明すると、私にとって非常に役立ちます。
さらなる研究のためのリンクも役に立ちます。
ありがとう