3

私のレールアプリで製品を検索するために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
  1. 私の質問は、複数形に関係なく検索するにはどうすればよいですか?
  2. 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' とはどういう意味ですか?

このブロックに追加できる他のオプションは何ですか。少し説明すると、私にとって非常に役立ちます。

さらなる研究のためのリンクも役に立ちます。

ありがとう

4

0 に答える 0