質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

Q&A

解決済

1回答

551閲覧

railsからelastic serachを使いたい

pecchan

総合スコア555

Elasticsearch

Elasticsearchは、クラウド向けに構築された、RESTful な API を提供する分散型のサーチエンジンアプリケーションです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

0グッド

0クリップ

投稿2023/01/26 00:41

編集2023/01/26 00:49

前提

ruby 3.1.2 rails 7.0.3

railsからelastic serachを使ってみたく以下を参考にgem を入れました。
elastisearch-railsを使ってRailsでElasticsearchを動かす【初心者向け】

rails コンソールからインデックスの作成コマンドを入力したところエラーになり、そこから進められずにいます。
基本的な質問で恐縮ですが、gemのインストールだけでなく、elasticsearch本体のインストールも必要なのでしょうか?あるいは別の原因でしょうか?
エラーの原因分かる方教えて下さい。

発生している問題・エラーメッセージ

rb(main):001:0> Article.__elasticsearch__.create_index! force:true /Users/pero/.rbenv/versions/3.1.2/lib/ruby/3.1.0/socket.rb:1214:in `__connect_nonblock': Failed to open TCP connection to localhost:9200 (Connection refused - connect(2) for 127.0.0.1:9200) (Faraday::ConnectionFailed) /Users/pero/.rbenv/versions/3.1.2/lib/ruby/3.1.0/socket.rb:1214:in `__connect_nonblock': Failed to open TCP connection to localhost:9200 (Connection refused - connect(2) for 127.0.0.1:9200) (Errno::ECONNREFUSED) /Users/pero/.rbenv/versions/3.1.2/lib/ruby/3.1.0/socket.rb:1214:in `__connect_nonblock': Connection refused - connect(2) for 127.0.0.1:9200 (Errno::ECONNREFUSED)

該当のソースコード

/app/models/article.rb

ruby

1require 'elasticsearch/model' 2 3class Article < ActiveRecord::Base 4 include Elasticsearch::Model 5 include Searchable 6end 7

/app/models/concerns/searchable.rb

ruby

1module Searchable 2 extend ActiveSupport::Concern 3 4 included do 5 include Elasticsearch::Model 6 7 mapping do 8 # ... 9 end 10 11 def self.search(query) 12 # ... 13 14 puts "test" 15 end 16 end 17end

/Gemfile

ruby

1gem 'elasticsearch-model' 2gem 'elasticsearch-rails'

試したこと

値を返せてませんが、railsとelastic search共に検索してみました。

irb(main):005:0> Article.all Article Load (0.2ms) SELECT "articles".* FROM "articles" => [#<Article:0x000000010a901ce8 id: 1, title: "Quick brown fox", body: nil, created_at: Wed, 25 Jan 2023 07:44:40.563667000 UTC +00:00, updated_at: Wed, 25 Jan 2023 07:44:40.563667000 UTC +00:00>, #<Article:0x000000010a9215e8 id: 2, title: "Fast black dogs", body: nil, created_at: Wed, 25 Jan 2023 07:44:48.009504000 UTC +00:00, updated_at: Wed, 25 Jan 2023 07:44:48.009504000 UTC +00:00>, #<Article:0x000000010a921520 id: 3, title: "Swift green frogs", body: nil, created_at: Wed, 25 Jan 2023 07:44:52.745768000 UTC +00:00, updated_at: Wed, 25 Jan 2023 07:44:52.745768000 UTC +00:00>] irb(main):006:0>

railsで検索

irb(main):003:0> res = Article.search 'fox' hogehoge => nil

elastic searchで検索

irb(main):004:0> Article.__elasticsearch__.search 'fox' => #<Elasticsearch::Model::Response::Response:0x000000010a737d18 @klass=[PROXY] Article (call 'Article.connection' to establish a connection), @search= #<Elasticsearch::Model::Searching::SearchRequest:0x000000010a73c070 @definition={:index=>"articles", :type=>nil, :q=>"fox"}, @klass=[PROXY] Article (call 'Article.connection' to establish a connection), @options={}>> irb(main):005:0>

elastic searchが起動していない?
gemの追加だけでなく、elasticsearch本体のインストールも必要なのでしょうか?

% curl http://localhost:9200 curl: (7) Failed to connect to localhost port 9200 after 7 ms: Connection refused % elasticsearch -V zsh: command not found: elasticsearch

以下なども参考にしました。
リンク内容
リンク内容

エラーメッセージによると
/etc/elasticsearch/elasticsearch.yml
が必要とのことでした。
自分の環境ではなかったので作成しましたがエラーメッセージ変化なしでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

やはり本体のインストールが必要なようでした。
参考にしたページにそのような記載がなかったため分かりませんでした。
本体をインストール後、インデックス作成も通ったようです。
有難う御座いました。

irb(main):006:0> Article.__elasticsearch__.create_index! force:true => {"acknowledged"=>true, "shards_acknowledged"=>true, "index"=>"articles"}

投稿2023/01/26 02:03

pecchan

総合スコア555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問