teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

6

修正

2021/03/28 02:35

投稿

Hinoarashi.
Hinoarashi.

スコア76

title CHANGED
File without changes
body CHANGED
@@ -126,7 +126,7 @@
126
126
  Project.es_search('ゲーム')
127
127
  ```
128
128
 
129
- `のように検索しても以下のように表示され、見た感じデータ検索をしていません。
129
+ のように検索しても以下のように表示され、見た感じデータ検索をしていません。
130
130
  ```ここに言語を入力
131
131
  #<Elasticsearch::Model::Response::Response:0x007fc1a85621a8
132
132
  @klass=[PROXY] Project (call 'Project.connection' to establish a connection),

5

修正

2021/03/28 02:35

投稿

Hinoarashi.
Hinoarashi.

スコア76

title CHANGED
@@ -1,1 +1,1 @@
1
- Rails環境下ElasticSearchのコントローラ設定をしたい
1
+ Rails環境下ElasticSearchのSearchメソッドの設定をしたい
body CHANGED
@@ -96,13 +96,71 @@
96
96
  end
97
97
  end
98
98
  ```
99
- Viewの全文検索はすでに実装されているので、あとはControllerの設定すればElasticSeachを組み込めると思ます。
99
+ Viewの全文検索はすでに実装されているので、あとはSearchメソッド使える状態にして、コントローラから呼び出せばElasticSeachが使え状態になると思ってます。
100
100
 
101
- ### View・Controllerのコードと発生している問題
101
+ ### 発生している問題
102
- まずViewControllerは以下のように全文検索が実装されいます。
102
+ [RailsElasticsearchで検索機能をつくり色々試しみる - その1:サンプルアプリケーションの作成
103
+ ](https://qiita.com/yamashun/items/6ecaa6f161b4cf283db3)
103
104
 
105
+ 上記の記事を参考にElasticSearchのインデックス内を検索するメソッドを以下のように実装しています。
106
+ ```ここに言語を入力
107
+ def es_search(query)
108
+ __elasticsearch__.search({
109
+ query: {
110
+ multi_match: {
111
+ fields: %w(id title contents industry ...),
112
+ type: 'cross_fields',
113
+ query: query,
114
+ operator: 'and'
115
+ }
116
+ }
117
+ })
118
+ end
119
+ end
120
+ end
121
+ ```
104
122
 
123
+ しかし、rails cで
124
+
125
+ ```ここに言語を入力
126
+ Project.es_search('ゲーム')
105
127
  ```
128
+
129
+ `のように検索しても以下のように表示され、見た感じデータ検索をしていません。
130
+ ```ここに言語を入力
131
+ #<Elasticsearch::Model::Response::Response:0x007fc1a85621a8
132
+ @klass=[PROXY] Project (call 'Project.connection' to establish a connection),
133
+ @search=
134
+ #<Elasticsearch::Model::Searching::SearchRequest:0x007fc1a8562248
135
+ @definition=
136
+ {:index=>"es_project_development",
137
+ :type=>nil,
138
+ :body=>
139
+ {:query=>
140
+ {:multi_match=>
141
+ {:fields=>
142
+ ["id",
143
+ "title",
144
+ "contents",
145
+ "industry",
146
+ "required",
147
+ ...
148
+ "comment"],
149
+ :type=>"cross_fields",
150
+ :query=>"ゲーム",
151
+ :operator=>"and"}}}},
152
+ @klass=[PROXY] Project (call 'Project.connection' to establish a connection),
153
+ @options={}>>
154
+ ```
155
+
156
+ 公式サイトを見ても実装自体は何となくあってる気がします。
157
+ [ElasticSearch公式](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html)
158
+
159
+ かなりドツボにはまっており、非常に困っています。。
160
+ ちなみにViewとControllerは以下のように実装されています。
161
+
162
+
163
+ ```
106
164
  /views/top/index.html.slim
107
165
 
108
166
  = form_tag search_path, {:method=>"get"}
@@ -133,27 +191,8 @@
133
191
 
134
192
  ...
135
193
  ```
136
- 参考にしている記事は
137
- ```ここに言語を入力
138
- def index
139
- @mangas = if search_word.present?
140
- Manga.es_search(search_word).records
141
- else
142
- Manga.all
143
- end
144
- end
145
194
 
146
- private
147
195
 
148
- def search_word
149
- @search_word ||= params[:search_word]
150
- end
151
- end
152
- ```
153
- のように実装されてますが、現状のコードに適用させる方法を色々試しましたが、できませんでした。
154
- また、イチから全文検索を実装しようにも現状のテーブルが複雑すぎて、記事のように実装できないのが現状です。
155
- かなり行き詰まっています、、
156
-
157
196
  何かヒントがあればあっさりいくような気がするんですが、、
158
197
  どなたかアドバイスいただけると幸いです。
159
198
  何卒よろしくお願いいたします。

4

更新

2021/03/28 02:33

投稿

Hinoarashi.
Hinoarashi.

スコア76

title CHANGED
File without changes
body CHANGED
@@ -5,12 +5,15 @@
5
5
  Ruby 2.4.1
6
6
  Ruby on Rails 5.1.7
7
7
  MySQL
8
- Elasticsearch:7.10.2-SNAPSHOT
8
+ Elasticsearch 7.10.2-SNAPSHOT
9
9
  kuromoji
10
10
 
11
11
  <gem>
12
+ elasticsearch (7.4.0)
13
+ elasticsearch-api (7.4.0)
12
14
  elasticsearch-model (7.1.0 80822d6)
13
15
  elasticsearch-rails (7.1.0 80822d6)
16
+ elasticsearch-transport (7.4.0)
14
17
 
15
18
  ※ローカル環境です
16
19
 

3

更新

2021/03/26 14:37

投稿

Hinoarashi.
Hinoarashi.

スコア76

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,9 @@
1
1
  ### 環境
2
2
 
3
+ MacOS
4
+ RailsServer
3
- Ruby:2.4.1
5
+ Ruby 2.4.1
4
- Ruby on Rails:5.1.7
6
+ Ruby on Rails 5.1.7
5
7
  MySQL
6
8
  Elasticsearch:7.10.2-SNAPSHOT
7
9
  kuromoji
@@ -10,6 +12,8 @@
10
12
  elasticsearch-model (7.1.0 80822d6)
11
13
  elasticsearch-rails (7.1.0 80822d6)
12
14
 
15
+ ※ローカル環境です
16
+
13
17
  ### 実現したいこと・前置き
14
18
 
15
19
  ElasticSearchを使って既存のMySQLのレコードを取り込み、全文検索を高速化させたいです。

2

includeの説明

2021/03/26 14:35

投稿

Hinoarashi.
Hinoarashi.

スコア76

title CHANGED
File without changes
body CHANGED
@@ -31,10 +31,12 @@
31
31
  ```
32
32
 
33
33
  ElasticSearchのindexやmappingの設定は以下のようにしました。
34
- なお、models/project.rb内
34
+ なお、models/project.rb内
35
35
  ```
36
+ class Project < ApplicationRecord
36
- include ProjectSearchable
37
+ include ProjectSearchable
38
+ ...
37
- ```を記述してます。
39
+ ```のようにしております。
38
40
  ```
39
41
  /models/concerns/project_searchable.rb
40
42
 

1

includeの説明

2021/03/25 04:45

投稿

Hinoarashi.
Hinoarashi.

スコア76

title CHANGED
File without changes
body CHANGED
@@ -31,7 +31,11 @@
31
31
  ```
32
32
 
33
33
  ElasticSearchのindexやmappingの設定は以下のようにしました。
34
+ なお、models/project.rb内に
34
35
  ```
36
+ include ProjectSearchable
37
+ ```を記述しています。
38
+ ```
35
39
  /models/concerns/project_searchable.rb
36
40
 
37
41
  module ProjectSearchable