我刚刚开始在 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”。当我尝试 aArtist.__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