【问题标题】:ElasticSearch not using all fields (array of strings) for searchElasticSearch 不使用所有字段(字符串数组)进行搜索
【发布时间】:2015-12-14 13:38:12
【问题描述】:

我刚刚开始在 Rails 中使用 ES,但遇到了一些我不明白的事情:

我有一个 Artist 模型(为示例而简化):

class Artist < ActiveRecord::Base
  include Elasticsearch::Model
  include Elasticsearch::Model::Callbacks

  # simplified to get the idea
  def get_aliases
    ["alias1", "alias2"]
  end

  def as_indexed_json(options = {})
   self.as_json({
    methods: [ :get_aliases, :get_tracks ],
    only: [ :name, :get_aliases],
    include: { 
     get_tracks: { only: :name } },
   })
  end
end

我的问题是 ES 搜索没有使用 get_aliases 属性给出结果:只搜索 'name' 属性:

我有一个开发者。有几个艺术家的数据库,其中没有一个包含字符串“Phil”,但一个在其别名中有“Phillip”。 当我尝试 Artist.__elasticsearch__.search('phil').count 时,我得到 0 结果。

我试过Artist.all.__elasticsearch__.import得到:

=> 0

Artist.__elasticsearch__.refresh_index! 得到:

=> {"_shards"=>{"total"=>10, "successful"=>5, "failed"=>0}}

(不确定这两个命令之间有什么区别...),但没有运气:/

我的问题是因为我使用字符串数组作为属性吗?我应该以不同的方式对其进行索引吗?

欢迎任何想法/帮助!

编辑:
我正在使用
gem 'elasticsearch-rails', '~> 0.1.7'
gem 'elasticsearch-model', '~> 0.1.7'

并且安装的 ElasticSearch 服务器是 1.7.1

【问题讨论】:

  • 您只是传递符号,而不是调用实际方法。 :get_aliases get_aliases
  • 好的,没想到会这样!我正在通过 irb 控制台进行测试,它在两种实现中都给出了相同的结果......如果你想发布答案,我会接受,否则,我明天会批准我的......谢谢!

标签: ruby-on-rails ruby elasticsearch elasticsearch-model


【解决方案1】:

感谢 Omarvelous 评论,我得到了它的工作,区别在于 as_indexed_json 方法:

def as_indexed_json(options = {})
  self.as_json({
    methods: [ :get_aliases, :get_tracks ],
    only: [ :name, :get_aliases],
    include: { 
     get_tracks: { only: :name } },
   })
end

应该是(注意 get_aliases 不是 'only' 数组中的符号):

def as_indexed_json(options = {})
  self.as_json({
    methods: [ :get_aliases, :get_tracks ],
    only: [ :name, get_aliases],
    include: { 
     get_tracks: { only: :name } },
   })
end

两种实现(符号或实际方法)都会在控制台中为您提供相同的结果:

irb(main):016:0> Artist.find(7).as_indexed_json
=> {"name"=>"Mick Jagger", "get_aliases"=>["Michael Philip Jagger"], "get_tracks"=>[]}

但在 ES 中,情况就完全不同了!

如果有人有一个很好的链接来学习如何通过 Rails 请求 ES,我将不胜感激;)

再次感谢 Omarvelous ;)

【讨论】:

    猜你喜欢
    • 2015-01-30
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    相关资源
    最近更新 更多