質問編集履歴

1

質問内容の変更条件数では無かった

2016/09/09 07:50

投稿

yamada3
yamada3

スコア14

test CHANGED
@@ -1 +1 @@
1
- ElasticsearchをRailsのsearchkickで検索するとクエリの条件数hitしくなる
1
+ Elasticsearchinteger型カラムを大きい値で検索でい?
test CHANGED
@@ -1,24 +1,108 @@
1
- DBには57540件のレコードが登録された状態で検索を行っています。
1
+ 環境
2
2
 
3
- Railsでsearchkickで以下のクエリで検索すると検索にpage:438までしかヒットしない。
3
+ ---
4
4
 
5
+ - Heroku
6
+
7
+ - Bonsai Elasticsearch
8
+
9
+ - Ruby on Rails 5.0.0
10
+
11
+
12
+
13
+ 現状
14
+
15
+ ---
16
+
17
+
18
+
5
- 以下のクエリべてのレコードがhitする
19
+ テーブル構造は以下のような構造です。
20
+
21
+ 57540件のレコードが登録された状態で検索を行っています。
6
22
 
7
23
  ```
24
+
25
+ class CreateItem < ActiveRecord::Migration[5.0]
26
+
27
+ def change
28
+
29
+ create_table :item do |t|
30
+
31
+ t.string :n
32
+
33
+ t.string :title
34
+
35
+ t.string :url
36
+
37
+ t.string :caption
38
+
39
+ t.integer :p
40
+
41
+ t.integer :f
42
+
43
+ t.integer :g
44
+
45
+ t.integer :j
46
+
47
+
48
+
49
+ t.timestamps
50
+
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+
57
+ ```
58
+
59
+ 以下のコードの実行結果からpの値はinteger型の0..1147323までの値が保存されている。
60
+
61
+ nの値はstring型の1..4553571051までの値が保存されている。
62
+
63
+
64
+
65
+ ```ruby
66
+
67
+ max = {price:0, node:0}
68
+
69
+ min = {price:0, node:0}
70
+
71
+ Item.all.each do |item|
72
+
73
+ max[:price] = max[:price] < item.price.to_i ? item.price.to_i : max[:price]
74
+
75
+ max[:node] = max[:node] < item.node.to_i ? item.node.to_i : max[:node]
76
+
77
+ min[:price] = max[:price] > item.price.to_i ? item.price.to_i : min[:price]
78
+
79
+ min[:node] = max[:node] > item.node.to_i ? item.node.to_i : min[:node]
80
+
81
+ end
82
+
83
+
84
+
85
+ max => {:price=>1147320, :node=>4553571051}
86
+
87
+ min => {:price=>0, :node=>1}
88
+
89
+ ```
90
+
91
+
92
+
93
+ しかしRailsのgemであるsearchkickで以下のクエリで検索すると検索にpage:438(21900件)までしかヒットしない。
94
+
95
+
96
+
97
+ ```ruby
8
98
 
9
99
  Item.search "*",
10
100
 
11
101
  where: {
12
102
 
13
- f: {gte: 0, lte: 90000},
103
+ p: 0..1147323,
14
104
 
15
- g: {gte: 0, lte: 90000},
16
-
17
- j: {gte: 0, lte: 90000},
18
-
19
- p: {gte: 0, lte: 90000},
20
-
21
- n: 1..99999
105
+ n: 1..4553571051
22
106
 
23
107
  },
24
108
 
@@ -32,17 +116,19 @@
32
116
 
33
117
  ```
34
118
 
119
+
120
+
35
121
  しかし以下のクエリで検索した所page:1151までhitした。
36
122
 
123
+
124
+
37
- ```
125
+ ```ruby
38
126
 
39
127
  Item.search "*",
40
128
 
41
129
  where: {
42
130
 
43
- f: {gte: 0, lte: 90000},
44
-
45
- n: 1..99999
131
+ n: 1..4553571051
46
132
 
47
133
  },
48
134
 
@@ -56,6 +142,6 @@
56
142
 
57
143
  ```
58
144
 
59
- クエリ検索条件するのが原因なのでしょうか?
145
+ p値の最大値大きるのが原因なのでしょうか?
60
146
 
61
- もっとスマートな方法や回避方法が分かる方はご教授ください。
147
+ 回避方法が分かる方はご教授ください。