1

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

映射是:

indexes :tags, type: :array

热门标签的查询是:

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

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

4

2 回答 2

7

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

indexes :tags, :type => 'string', :index => :not_analyzed 
于 2012-08-11T23:52:51.403 回答
1

对我来说,解决方案:index => :not_analyzed就像上面一样,使用 Page.create_elasticsearch_index 构建索引,而不是 Page.import,如此处所示https://stackoverflow.com/a/14693422/524458

于 2013-07-19T12:25:22.457 回答