如何专门使用“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","re​​ason":"no such index" ,"index":"services","re​​source.type":"inde x_or_alias","re​​source.id":"services"],"type":"index_not_found_exception","re​​aso n":"没有这样的索引" ,"index":"services","re​​source.type":"index_or_alias","re​​source.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:in import' C:/datacheck/app/models/service.rb:10:in ' (eval):1:in `block (3 levels) in ' Tasks: TOP => elasticsearch:import:model (通过运行查看完整跟踪使用 --trace 的任务)当我运行 bundle exec rake environment elasticsearch:import:model CLASS='Service'

以上是关于如何专门使用“Elasticsearch”gem 将 elasticsearch 与 rails 应用程序集成的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch和Tyre Gem:“IndexMissingException [[products] missing]”?

ruby 在Heroku上使用Rails&searchkick gem安全地使用Amazon Elasticsearch(签名请求)。

在 Rails 4.1 中使用 Searchkick gem 在 Elasticsearch 中设置 Facets

如何确定哪个 gem 拥有一个文件?

如何为 searchkick gem 设置不同的端口?

Elasticsearch:使用 distance feature 查询提高分数