繁体   English   中英

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'属性:

我有一个开发人员。 数据库中有几位艺术家,其中没有一个带有字符串“ Phil”,但是一个别名带有“ Phillip”。 当我尝试使用Artist.__elasticsearch__.search('phil').count我得到0个结果。

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

=> 0

Artist.__elasticsearch__.refresh_index! 得到:

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

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

我的问题是否来自将字符串数组用作属性的事实? 我应该以不同的方式索引它吗?

欢迎任何想法/帮助!

编辑:
我正在使用
宝石'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 NOT'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;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM