Refresh tests:
Using model from https://github.com/elastic/elasticsearch-rails/blob/15761247f3e99654bda946a178e50b5365414b59/elasticsearch-persistence/examples/music/album.rb
Model:
class Album
include Elasticsearch::Persistence::Model
index_name [Rails.application.engine_name, Rails.env].join('-')
attribute :title
end
(1..100).each do |i|
a = Album.new(title: "tom-#{i}")
a.save
puts i
puts x = Album.count
puts x == i
puts "\n"
end
result:
1
0
false
2
1
false
3
1
false
4
1
false
5
1
false
6
1
false
7
1
false
8
1
false
9
1
false
10
1
false
11
1
false
12
1
false
13
1
false
14
1
false
15
1
false
16
1
false
17
1
false
18
1
false
19
1
false
20
1
false
21
1
false
22
1
false
23
1
false
24
1
false
25
1
false
26
1
false
27
1
false
28
1
false
29
1
false
30
1
false
31
1
false
32
1
false
33
1
false
34
1
false
35
1
false
36
1
false
37
1
false
38
22
false
39
22
false
40
22
false
41
31
false
42
31
false
43
31
false
44
31
false
45
39
false
46
39
false
47
39
false
48
39
false
49
39
false
50
39
false
51
39
false
52
39
false
53
39
false
54
39
false
55
39
false
56
39
false
57
39
false
58
39
false
59
39
false
60
39
false
61
39
false
62
39
false
63
39
false
64
39
false
65
39
false
66
39
false
67
39
false
68
39
false
69
39
false
70
39
false
71
39
false
72
39
false
73
39
false
74
39
false
75
39
false
76
39
false
77
39
false
78
39
false
79
39
false
80
39
false
81
39
false
82
39
false
83
39
false
84
39
false
85
39
false
86
39
false
87
39
false
88
39
false
89
70
false
90
70
false
91
70
false
92
80
false
93
80
false
94
80
false
95
80
false
96
80
false
97
90
false
98
90
false
99
90
false
100
90
false
```
As you can see the data is styll not beeing indexed at the time we are adding next one.
### With refresh
```
(1..100).each do |i|
a = Album.new(title: "tom-#{i}")
a.save(refresh: true)
puts i
puts x = Album.count
puts x == i
puts "\n"
end
```
```
1
1
true
2
2
true
3
3
true
4
4
true
5
5
true
6
6
true
7
7
true
8
8
true
9
9
true
10
10
true
11
11
true
12
12
true
13
13
true
14
14
true
15
15
true
16
16
true
17
17
true
18
18
true
19
19
true
20
20
true
21
21
true
22
22
true
23
23
true
24
24
true
25
25
true
26
26
true
27
27
true
28
28
true
29
29
true
30
30
true
31
31
true
32
32
true
33
33
true
34
34
true
35
35
true
36
36
true
37
37
true
38
38
true
39
39
true
40
40
true
41
41
true
42
42
true
43
43
true
44
44
true
45
45
true
46
46
true
47
47
true
48
48
true
49
49
true
50
50
true
51
51
true
52
52
true
53
53
true
54
54
true
55
55
true
56
56
true
57
57
true
58
58
true
59
59
true
60
60
true
61
61
true
62
62
true
63
63
true
64
64
true
65
65
true
66
66
true
67
67
true
68
68
true
69
69
true
70
70
true
71
71
true
72
72
true
73
73
true
74
74
true
75
75
true
76
76
true
77
77
true
78
78
true
79
79
true
80
80
true
81
81
true
82
82
true
83
83
true
84
84
true
85
85
true
86
86
true
87
87
true
88
88
true
89
89
true
90
90
true
91
91
true
92
92
true
93
93
true
94
94
true
95
95
true
96
96
true
97
97
true
98
98
true
99
99
true
100
100
true
```
So `resource_instance.save(refresh: true)` should be enough to ensure data is in sync. But here is a limitation in sence that technically we are locking the shard to the refresh which may be a problem on huge load (which we don't have at this point)
## Refresh at the end of indexing
But there is a better workaround `Album.gateway.refresh_index` every few records (e.g. every 25 records tell index to sync) or before you call the actual search
```
(1..100).each do |i|
a = Album.new(title: "tom-#{i}")
a.save
if i % 25 == 0 #each 25 rec try to sync
Album.gateway.refresh_index!
end
puts i
puts x = Album.count
puts x == i
puts "\n"
end
```
look at number 25, 50, 75, 100, they are in sync !
```
1
0
false
2
0
false
3
0
false
4
0
false
5
0
false
6
0
false
7
0
false
8
0
false
9
0
false
10
0
false
11
0
false
12
0
false
13
0
false
14
0
false
15
0
false
16
0
false
17
0
false
18
0
false
19
0
false
20
0
false
21
0
false
22
7
false
23
13
false
24
20
false
25
25
true
26
25
false
27
25
false
28
25
false
29
25
false
30
25
false
31
25
false
32
25
false
33
25
false
34
25
false
35
25
false
36
25
false
37
25
false
38
25
false
39
25
false
40
25
false
41
25
false
42
25
false
43
25
false
44
25
false
45
25
false
46
25
false
47
25
false
48
25
false
49
25
false
50
50
true
51
50
false
52
50
false
53
50
false
54
50
false
55
50
false
56
50
false
57
50
false
58
50
false
59
50
false
60
50
false
61
50
false
62
53
false
63
56
false
64
61
false
65
61
false
66
61
false
67
62
false
68
62
false
69
62
false
70
62
false
71
62
false
72
62
false
73
62
false
74
62
false
75
75
true
76
75
false
77
75
false
78
75
false
79
75
false
80
75
false
81
75
false
82
75
false
83
75
false
84
75
false
85
75
false
86
75
false
87
75
false
88
75
false
89
75
false
90
75
false
91
75
false
92
75
false
93
75
false
94
75
false
95
75
false
96
75
false
97
75
false
98
75
false
99
75
false
100
100
true
```
sources
* https://github.com/elastic/elasticsearch-rails/blob/15761247f3e99654bda946a178e50b5365414b59/elasticsearch-persistence/examples/music/artists/artists_controller_test.rb
* https://www.elastic.co/blog/refreshing_news