【发布时间】: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_aliasesget_aliases -
好的,没想到会这样!我正在通过 irb 控制台进行测试,它在两种实现中都给出了相同的结果......如果你想发布答案,我会接受,否则,我明天会批准我的......谢谢!
标签: ruby-on-rails ruby elasticsearch elasticsearch-model