我的模型有一个标签字段,它是一个标签数组。我遇到的问题是我希望标签像关键字一样工作,但ES为了分面的目的以某种方式将它们分成空格。
映射是:
indexes :tags, type: :array
热门标签的查询是:
tire.search do
facet 'tags' do
terms :tags, size: 100
end
end
现在结果是单个词。例如标记为[“复古音乐”,“真棒”]的记录将最终具有三个单独的标签。同样,如果我进行查询以搜索“复古音乐”(must { term 'tags', options[:tag] }
),则会失败,而对“复古”或“音乐”的查询将会成功。这里所希望的行为是标签应该是原子的,所以只有“复古音乐”(或“棒极了”)标签搜索才能成功。
答案 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所示。