ElasticSearch 不使用所有字段(字符串数组)进行搜索

ElasticSearch not using all fields (array of strings) for search

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

我有一个 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' 属性:

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

我已经尝试 Artist.all.__elasticsearch__.import 获得:

=> 0

Artist.__elasticsearch__.refresh_index!得到:

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

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

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

欢迎任何idea/help!

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

并且安装的 ElasticSearch 服务器是 1.7.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 中,情况就完全不同了!

谁有好的link学习如何通过Rails请求ES,不胜感激;)

再次感谢 Omarvelous ;)