多字面(ElasticSearch + Tire)

时间:2012-08-11 21:32:45

标签: elasticsearch tire

我的模型有一个标签字段,它是一个标签数组。我遇到的问题是我希望标签像关键字一样工作,但ES为了分面的目的以某种方式将它们分成空格。

映射是:

indexes :tags, type: :array

热门标签的查询是:

tire.search do
  facet 'tags' do
    terms :tags, size: 100
  end
end

现在结果是单个词。例如标记为[“复古音乐”,“真棒”]的记录将最终具有三个单独的标签。同样,如果我进行查询以搜索“复古音乐”(must { term 'tags', options[:tag] }),则会失败,而对“复古”或“音乐”的查询将会成功。这里所希望的行为是标签应该是原子的,所以只有“复古音乐”(或“棒极了”)标签搜索才能成功。

2 个答案:

答案 0 :(得分:7)

默认情况下,elasticsearch使用“标准”分析器分析字符串,该分析器将字符串转换为小写,将其拆分为单词并删除一些经常出现的单词(停用词)。您可以通过关闭字段标记的分析器来阻止elasticsearch执行所有操作:

indexes :tags, :type => 'string', :index => :not_analyzed 

答案 1 :(得分:1)

对我来说,解决方案是:index => :not_analyzed,如上所述,并使用Page.create_elasticsearch_index构建索引,而不是Page.import,如https://stackoverflow.com/a/14693422/524458所示。