0

我想将一组自定义停用词添加到模型中的一个特定字段。所以我为该字段添加了一个自定义分析器。但是,当我使用停用词进行搜索时,仍然会显示结果。我的模型里面的代码如下:

settings :analysis => {
 :filter  => {
  :stop_filter => {
    :type        => "stop",
    :stopwords   => ["how", "when", "where", "who", "which", "what", "do", "the", "a", "is", "to"]
  }
 },
 :analyzer => {
  :my_analyzer => {
    :type         => "standard",
    :filter       => "stop_filter",
    :tokenizer    => "standard"
  }
 }
} do
 mapping do
  indexes :id,              :type => 'integer',     :index    => :not_analyzed
  indexes :sortable_id,     :type => 'integer',     :index    => :not_analyzed
  indexes :summary,         :type => 'string',      :analyzer => 'my_analyzer'
 end
end

def self.search_all(search_string = nil, options = {})
  tire.search(:load => true, :page => options[:page] || 1, :per_page => options[:per_page] || 10) do
    query {search_string.present? ? string(search_string) : all}
    filter :term, {:topics_list_filter =>  options[:topic_id]} if options[:topic_id]
    sort {by options[:sort], options[:order] || 'desc'} if options[:sort].present?
  end
end

我还尝试通过stopwords在分析器中提供选项,而不创建stop_filter. 我不确定我哪里出错了。

4

2 回答 2

2

您的查询正在搜索_all使用默认分析器编制索引的字段。您可以将查询中的默认字段替换为默认分析器,summary也可以替换为默认分析器。请参阅如何为使用轮胎的弹性搜索设置默认分析器?了解更多信息。

于 2012-11-16T12:55:33.477 回答
0

您是否重新索引了您的文档?我认为只有在创建文档时以及在某些情况下创建索引时才会将您的映射条件发送到 ElasticSearch。

于 2012-11-16T12:09:23.833 回答