如何专门使用“Elasticsearch”gem 将 elasticsearch 与 rails 应用程序集成
Posted
技术标签:
【中文标题】如何专门使用“Elasticsearch”gem 将 elasticsearch 与 rails 应用程序集成【英文标题】:How to integrate elasticsearch with rails application specifically using "Elasticsearch" gem 【发布时间】:2016-02-25 08:54:13 【问题描述】:我是 Rails 和弹性搜索的新手。我已经看到使用轮胎、Searchkick 和其他一些配置的其他资源,但我想使用Elasticsearch
gem。我在我的系统上运行 rails 应用程序并运行 Elasticsearch 服务器,但我不知道如何配置它们以相互通信。
目前,我在做同样的事情时遇到了很多麻烦。任何帮助将不胜感激。
【问题讨论】:
请发布您的elasticsearch相关代码,我们不知道您的问题/错误是什么。 require "elasticsearch/model" 类服务 "::Request" belongs_to :employee , :class_name => "::Employee" end Service.import Error ActionView::Template::Error ([404] "error":"root_cause":["type":"index_not_fo und_exception","reason":"no such index" ,"index":"services","resource.type":"inde x_or_alias","resource.id":"services"],"type":"index_not_found_exception","reaso n":"没有这样的索引" ,"index":"services","resource.type":"index_or_alias","resource.id":"services","status":404): 类 ServicesController 【参考方案1】:对于用于模型索引的 elastic github gem 的非常基本的快速入门,您可以在开发环境中使用在 localhost:9200 上运行的 elasticsearch 执行以下操作
在 Gemfile 中:
gem 'elasticsearch-model'
然后在终端上运行:
$ bundle install
在 app/models/service.rb 中包含在类声明之后:
include Elasticsearch::Model
您现在可以使用现有数据在控制台上使用它(结果只是一个示例):
$ rails console
# Create the index for Service model on elasticsearch
> Service.__elasticsearch__.create_index!
=> "acknowledged"=>true
# Import current Service records into the index
> Service.import
Service Load (207.3ms) SELECT "services".* FROM "services" ORDER BY "services"."id" ASC LIMIT 1000
# Sample search returning total results
> Service.__elasticsearch__.search("mykeyword").results.total
=> 123
更多信息和细节你可以看看项目的github page
【讨论】:
【参考方案2】:更好地使用elasticsearch-rails
在 Gemfile 中:
gem install elasticsearch-rails
要从您的文章模型中导入记录,请运行:
$ bundle exec rake environment elasticsearch:import:model CLASS='Article'
要将导入的记录限制在某个 ActiveRecord 范围内,请将其传递给任务:
$ bundle exec rake environment elasticsearch:import:model CLASS='Article' SCOPE='published'
运行此命令以显示使用说明:
$ bundle exec rake -D elasticsearch
如果你想用于模型
elasticsearch-model,其中包含 Ruby/Rails 模型的搜索集成,例如 ActiveRecord::Base 和 Mongoid,
【讨论】:
不“Elasticsearch”做与 Elasticsearch-rails 和 Elasticsearch-model 所做的相同的事情,我阅读 Elasticsearch-rails 与 Elasticsearch-rails 配套,所以我认为与其使用两个 gem,不如使用两个 gem使用一个,即 Elasticsearch..如果我错了,请纠正我。 我构建了一个应用程序。现在,我想添加一个功能,以便用户可以根据选择来优化搜索,就像 Flipkart、paytm 在不同产品上所做的那样。 是的,适合您的 Rails 应用程序使用 elastic-rails elasticsearch-rails 库是 elasticsearch-model 库的伴侣,提供适用于 Ruby on Rails 应用程序的功能。 我在 gem 文件中添加了 Elasticsearch-rails、Elasticsearch-model...Elasticsearch 服务器在端口号上运行。 9200. 但它通过以下错误。我的模型名称是“服务”服务不存在要导入。使用创建索引!或 :force 选项来创建它。 C:\datacheck> bundle exec rake environment elasticsearch:import:model CLASS='SER VICE' DL 已弃用,请使用 Fiddle DL 已弃用,请使用 Fiddle rake 已中止! ArgumentError:要导入的服务不存在。使用创建索引!或 :force 选项来创建它。 C:inimport' C:/datacheck/app/models/service.rb:10:in
以上是关于如何专门使用“Elasticsearch”gem 将 elasticsearch 与 rails 应用程序集成的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch和Tyre Gem:“IndexMissingException [[products] missing]”?
ruby 在Heroku上使用Rails&searchkick gem安全地使用Amazon Elasticsearch(签名请求)。