我将我的应用从solr迁移到Elasticsearch进行文档搜索。部署Elasticsearch的推荐模式是在Rails关注中包含Elasticsearch功能(即Elasticsearch::Model
和Elasticsearch::Model::Indexing
),然后在模型中包含此模块。我已经实现了这一点。 (有些方法暂时被注释掉,因为我正在努力解决这个问题。)
#app/models/concerns/elasticsearch_user.rb
require 'active_support/concern'
module ElasticsearchUser
extend ActiveSupport::Concern
included do
require 'elasticsearch/model'
include Elasticsearch::Model
include Elasticsearch::Model::Indexing
#mapping do
# #to-do
#end
#def self.search(query)
# _elasticsearch_.search(
# {
# query: {
# multi_match: {
# query: query,
# fields: ['username^2', 'email', 'full_name']
# }
# }
# }
# )
#end
end
end
#User.rb
...
# Elasticsearch configuration
include ElasticsearchUser
# index_name "users" <-- This value is inferred automatically by the model name
settings index: { number_of_shards: 1 } do
mappings dynamic: 'false' do
indexes :username
indexes :email
indexes :full_name
end
end
...
def as_indexed_json(options={})
self.as_json(only: [:username, :email, :full_name],
methods: [:full_name]
)
end
我可以毫无问题地致电Model.import
和Model.search
。调用Model._elasticsearch_.create_index!
(带有和不带_elasticsearch_
命名空间)之类的东西会抛出NoMethodError。我已经尝试将Elasticsearch::Model
直接包含在我的模型定义中但没有成功。我也试过要求'active_support / concern&#39;在我的模型的顶部 - 也没有运气。很明显模块/关注点没有包含在我的模型中,但我无法弄清楚原因。
答案 0 :(得分:0)
您使用的是正确的导轨版本吗? 尝试!!在控制台
require 'active_support/concern'
如果返回nil模块未导入
答案 1 :(得分:-1)
这实际上与包括关注无关。我在搜索方法中添加了一些日志记录(we made it to the search
),并在控制台输出中找到了它。在Elasticsearch的帮助下,我们意识到我使用的是_elasticsearch_
,但它的__elasticsearch__
有两个下划线。在所有的事情......