3

我正在使用 elasticsearch-rails 和 elasticsearch-model gem 在我的 rails 应用程序中搜索产品。

我想让我的搜索不区分大小写,并且必须独立于复数形式。我在谷歌上进行了很多研究,但对如何使用分析器进行了预感,但没有成功。所以我不得不发布一个新问题。

这是我要搜索的产品模型

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

这个块用于搜索的确切目的是什么。

映射动态:“假”是什么意思?

index :name, analyzer: 'snowball', index_options: 'offsets' 是什么意思?

可以在此块中添加哪些其他选项并稍加解释将对我有很大帮助。

任何进一步研究的链接也很有帮助。

谢谢

4

0 回答 0