1

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

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

这是我要搜索的模型

require 'elasticsearch/model'

class Article < ActiveRecord::Base
  include Elasticsearch::Model
  include Elasticsearch::Model::Callbacks

  settings index: { number_of_shards: 1 } do
    mappings dynamic: 'false' do
      indexes :title, analyzer: 'english', index_options: 'offsets'
      indexes :text, analyzer: 'english'
    end
  end

  def self.search(query)
    __elasticsearch__.search(
      {
        query: {
          multi_match: {
            query: query,
            fields: ['title^10', 'text']
          }
        },
        highlight: {
          pre_tags: ['<em>'],
          post_tags: ['</em>'],
          fields: {
            title: {},
            text: {}
          }
        }
      }
    )
  end
end

# Delete the previous articles index in Elasticsearch
Article.__elasticsearch__.client.indices.delete index: Article.index_name rescue nil

# Create the new index with the new mapping
Article.__elasticsearch__.client.indices.create \
  index: Article.index_name,
  body: { settings: Article.settings.to_hash, mappings: Article.mappings.to_hash }

# Index all article records from the DB to Elasticsearch
Article.import

#Article.import force: true

我的问题是如何搜索词?T恤,T恤,T恤都应该匹配。任何进一步研究的链接也很有帮助。谢谢

4

1 回答 1

0

在表中搜索的方法之一是:

User.where("firstname ILIKE ? OR lastname ILIKE ?", "%#{params[q]}%", "%#{params[q]}%" );

在哪里

User is Model

params[q] is search query parameter.
于 2017-01-09T10:25:12.670 回答