【问题标题】:Setting Elasticsearch analyzer for specific field using tire gem使用轮胎宝石为特定领域设置 Elasticsearch 分析器
【发布时间】:2012-06-04 15:54:49
【问题描述】:

我有一个包含以下字段的资源对象:titledescriptionbody

使用轮胎宝石我想对 titledescription 使用标准分析器,但对于 body 字段我想使用雪球分析仪。

所以在我的 resource.rb 文件中,我有以下代码:

mapping do
  indexes :title, type: 'string', :index => :not_analyzed, :store => true
  indexes :description, type: 'string'
  indexes :body, type: 'string', :analyzer => 'snowball'
end

def self.search(params)
  search_query = params[:query]

  tire.search(page: params[:page], per_page: 15) do |s|
    s.query { string params[:query], default_operator: "AND"} if params[:query].present?
    # do i need another line here specifically for description?
    #s.query { string "body:#{params[:query]}", analyzer: 'snowball'} if params[:query].present?
  end
end

我将映射中的分析器设置为雪球。我验证这是否有效,因为如果我运行以下命令:

curl -XGET localhost:9200/example/_search?q=body:cook

它将返回烹饪、煮熟等。

但是我希望能够通过以下查询

curl -XGET localhost:9200/example/_search?q=cooking

我希望 elasticsearch 在 titledescription 字段中搜索单词 cooking 并搜索单词 cook 在正文中。

这可能吗?而且因为我是整个搜索游戏的新手,这甚至是个好主意吗?还是我只是一个在火坑上玩弄汽油罐的人?

【问题讨论】:

    标签: ruby-on-rails elasticsearch tire


    【解决方案1】:

    当您未在查询中指定字段时,将搜索 _all 字段。 _all 字段包含所有字段的副本,它使用默认分析器。正如How do I set the default analyzer for elastic search with tire? 中所述,可以将默认分析器更改为滚雪球,还可以控制哪些字段包含在_all 字段中。

    【讨论】:

    • 感谢 imotov,我看到了那个帖子。如果我使用该帖子作为参考,我假设如果我将雪球设置为默认分析器,它也将应用于标题和描述字段。我想我想要的是您提到的第二个选项,即控制 _all 字段中包含哪些字段,但是如果我使用此选项,我是否还可以通过雪球分析器定义包含其他字段?您是否还知道在同一查询中使用两个分析器的在线示例?再次感谢。
    • 我明白了,如果你想对不同的字段使用不同的分析器,_all 字段不适合你。 _all 字段基本上是几个字段的副本,它只能使用一个分析器。如果您需要不同的分析器,您应该对每个字段使用单独的查询,然后使用 Bool QueryDis Max Query 组合这些查询。
    猜你喜欢
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    相关资源
    最近更新 更多