首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Elasticsearch + Tire不要忽略重音

Elasticsearch + Tire不要忽略重音
EN

Stack Overflow用户
提问于 2013-09-03 07:33:57
回答 1查看 345关注 0票数 1

我想尽一切办法来解决这个问题。

我有一个简单的应用程序与搜索rails。当我搜索带有重音的东西时,搜索工作得很好,但是如果我搜索没有重音的单词,我的结果是空的。

我读了Tire和Elasticsearch的文档,但我不知道发生了什么

代码语言:javascript
复制
class Article < ActiveRecord::Base
  attr_accessible :description, :title, :user_id

  belongs_to :user

  include Tire::Model::Search
  include Tire::Model::Callbacks

  mapping do
    indexes :_id, index: :not_analyzed
    indexes :title, analyzer: 'snowball', boost: 100
    indexes :description, analyzer: 'snowball'
  end

  def self.search(params)
    tire.search(page: params[:page], per_page: 10) do
      query { string params[:q], default_operator: "AND" } if params[:q].present?
    end
  end
end

下面我试着使用asciifolding,但它不起作用。

代码语言:javascript
复制
  class Article < ActiveRecord::Base
  attr_accessible :description, :title, :user_id

  include Tire::Model::Search
  include Tire::Model::Callbacks

  tire.settings :index => {
      :analysis => {
          :analyzer => {
              :index_analyzer => {
                  :tokenizer => "whitespace",
                  :filter => ["asciifolding", "lowercase", "snowball"]
              },
              :search_analyzer => {
                  :tokenizer => "whitespace",
                  :filter => ["asciifolding", "lowercase", "snowball"]
              }
          },
          :filter => {
              :snowball => {
                  :type => "snowball",
                  :language => "Portuguese"
              }
          }
      }
  }

  mapping do
    indexes :_id, index: :not_analyzed
    indexes :title, analyzer: 'snowball', boost: 100
    indexes :description, analyzer: 'snowball'
  end

  def self.search(params)
    tire.search(page: params[:page], per_page: 10) do
      query { string params[:q], default_operator: "AND" } if params[:q].present?
    end
  end
end

我正在使用Chrome上的Sense进行测试,映射和所有配置都是正常的!

怎么回事?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-02-07 06:17:56

您必须使用在索引中指定的分析器。您当前正在为您的标题和描述使用"snowball“分析器,但不执行asciifolding:

代码语言:javascript
复制
mapping do
  indexes :_id, index: :not_analyzed
  indexes :title, analyzer: 'snowball', boost: 100
  indexes :description, analyzer: 'snowball'
end

改为这样做

代码语言:javascript
复制
mapping do
  indexes :_id, index: :not_analyzed
  indexes :title, analyzer: :index_analyzer, boost: 100
  indexes :description, analyzer: :index_analyzer
end

假设你想要query_analyzer。然后,当您想要搜索时,使用其他分析器:

代码语言:javascript
复制
tire.search(page: params[:page], per_page: 10) do
  query { string params[:q], 
          analyzer: :search_analyzer, 
          default_operator: "AND" } if params[:q].present?
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18582069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档