searchkick 4.5.0 → 4.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +16 -10
- data/lib/searchkick/process_queue_job.rb +1 -1
- data/lib/searchkick/query.rb +2 -1
- data/lib/searchkick/reindex_queue.rb +18 -4
- data/lib/searchkick/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44f4a5255a208b7d24aa1b6d668808d3aff83a9ebb9f07a1a1a83fd9e3845738
|
4
|
+
data.tar.gz: 0ac096c02151a04a00751de140520547570b9c24fa2fccffd9d4761637b85531
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ff25ecdd74852fdbca33909d37445adbb42aa76785df75d9f1d9903d1dbee5712507d30a654dfaf829b9b6c0db0148cf48fbb4a257e3decf69e6c316c40b66fc
|
7
|
+
data.tar.gz: e07d8ddd9dbcf661db01948a7f20ad0b91d6427adddbbe987d571011983046650bd21726f74a2d0d11caaf9d49cd83b70a92738dc1cb21346e2c74009a1c494c
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -20,7 +20,7 @@ Plus:
|
|
20
20
|
- autocomplete
|
21
21
|
- “Did you mean” suggestions
|
22
22
|
- supports many languages
|
23
|
-
- works with
|
23
|
+
- works with Active Record, Mongoid, and NoBrainer
|
24
24
|
|
25
25
|
Check out [Searchjoy](https://github.com/ankane/searchjoy) for analytics and [Autosuggest](https://github.com/ankane/autosuggest) for query suggestions
|
26
26
|
|
@@ -45,11 +45,11 @@ Check out [Searchjoy](https://github.com/ankane/searchjoy) for analytics and [Au
|
|
45
45
|
|
46
46
|
## Getting Started
|
47
47
|
|
48
|
-
|
48
|
+
Install [Elasticsearch](https://www.elastic.co/downloads/elasticsearch) or [OpenSearch](https://opensearch.org/downloads.html) (OpenSearch support is experimental). For Homebrew, use:
|
49
49
|
|
50
50
|
```sh
|
51
|
-
brew install elasticsearch
|
52
|
-
brew services start elasticsearch
|
51
|
+
brew install elasticsearch # or opensearch
|
52
|
+
brew services start elasticsearch # or opensearch
|
53
53
|
```
|
54
54
|
|
55
55
|
Add this line to your application’s Gemfile:
|
@@ -58,7 +58,7 @@ Add this line to your application’s Gemfile:
|
|
58
58
|
gem 'searchkick'
|
59
59
|
```
|
60
60
|
|
61
|
-
The latest version works with Elasticsearch 6 and 7. For Elasticsearch 5, use version 3.1.3 and [this readme](https://github.com/ankane/searchkick/blob/v3.1.3/README.md).
|
61
|
+
The latest version works with Elasticsearch 6 and 7 and OpenSearch 1. For Elasticsearch 5, use version 3.1.3 and [this readme](https://github.com/ankane/searchkick/blob/v3.1.3/README.md).
|
62
62
|
|
63
63
|
Add searchkick to models you want to search.
|
64
64
|
|
@@ -649,7 +649,7 @@ class Product < ApplicationRecord
|
|
649
649
|
def search_data
|
650
650
|
{
|
651
651
|
name: name,
|
652
|
-
conversions: searches.group(:query).
|
652
|
+
conversions: searches.group(:query).distinct.count(:user_id)
|
653
653
|
# {"ice cream" => 234, "chocolate" => 67, "cream" => 2}
|
654
654
|
}
|
655
655
|
end
|
@@ -1212,12 +1212,18 @@ FactoryBot.create(:product, :some_trait, :reindex, some_attribute: "foo")
|
|
1212
1212
|
|
1213
1213
|
### GitHub Actions
|
1214
1214
|
|
1215
|
-
Check out [setup-elasticsearch](https://github.com/ankane/setup-elasticsearch) for an easy way to install Elasticsearch
|
1215
|
+
Check out [setup-elasticsearch](https://github.com/ankane/setup-elasticsearch) for an easy way to install Elasticsearch:
|
1216
1216
|
|
1217
1217
|
```yml
|
1218
1218
|
- uses: ankane/setup-elasticsearch@v1
|
1219
1219
|
```
|
1220
1220
|
|
1221
|
+
And [setup-opensearch](https://github.com/ankane/setup-opensearch) for an easy way to install OpenSearch:
|
1222
|
+
|
1223
|
+
```yml
|
1224
|
+
- uses: ankane/setup-opensearch@v1
|
1225
|
+
```
|
1226
|
+
|
1221
1227
|
## Deployment
|
1222
1228
|
|
1223
1229
|
Searchkick uses `ENV["ELASTICSEARCH_URL"]` for the Elasticsearch server. This defaults to `http://localhost:9200`.
|
@@ -1580,14 +1586,14 @@ class ReindexConversionsJob < ApplicationJob
|
|
1580
1586
|
# get records that have a recent conversion
|
1581
1587
|
recently_converted_ids =
|
1582
1588
|
Searchjoy::Search.where("convertable_type = ? AND converted_at > ?", class_name, 1.day.ago)
|
1583
|
-
.order(:convertable_id).
|
1589
|
+
.order(:convertable_id).distinct.pluck(:convertable_id)
|
1584
1590
|
|
1585
1591
|
# split into groups
|
1586
1592
|
recently_converted_ids.in_groups_of(1000, false) do |ids|
|
1587
1593
|
# fetch conversions
|
1588
1594
|
conversions =
|
1589
1595
|
Searchjoy::Search.where(convertable_id: ids, convertable_type: class_name)
|
1590
|
-
.group(:convertable_id, :query).
|
1596
|
+
.group(:convertable_id, :query).distinct.count(:user_id)
|
1591
1597
|
|
1592
1598
|
# group conversions by record
|
1593
1599
|
conversions_by_record = {}
|
@@ -1839,7 +1845,7 @@ class Product < ApplicationRecord
|
|
1839
1845
|
def search_data
|
1840
1846
|
{
|
1841
1847
|
name: name,
|
1842
|
-
unique_user_conversions: searches.group(:query).
|
1848
|
+
unique_user_conversions: searches.group(:query).distinct.count(:user_id),
|
1843
1849
|
# {"ice cream" => 234, "chocolate" => 67, "cream" => 2}
|
1844
1850
|
total_conversions: searches.group(:query).count
|
1845
1851
|
# {"ice cream" => 412, "chocolate" => 117, "cream" => 6}
|
data/lib/searchkick/query.rb
CHANGED
@@ -864,10 +864,11 @@ module Searchkick
|
|
864
864
|
}
|
865
865
|
end
|
866
866
|
|
867
|
-
# TODO id transformation for arrays
|
868
867
|
def set_order(payload)
|
869
868
|
order = options[:order].is_a?(Enumerable) ? options[:order] : {options[:order] => :asc}
|
870
869
|
id_field = :_id
|
870
|
+
# TODO no longer map id to _id in Searchkick 5
|
871
|
+
# since sorting on _id is deprecated in Elasticsearch
|
871
872
|
payload[:sort] = order.is_a?(Array) ? order : Hash[order.map { |k, v| [k.to_s == "id" ? id_field : k, v] }]
|
872
873
|
end
|
873
874
|
|
@@ -14,11 +14,17 @@ module Searchkick
|
|
14
14
|
|
15
15
|
# TODO use reliable queuing
|
16
16
|
def reserve(limit: 1000)
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
if supports_rpop_with_count?
|
18
|
+
Searchkick.with_redis { |r| r.call("rpop", redis_key, limit) }
|
19
|
+
else
|
20
|
+
record_ids = []
|
21
|
+
Searchkick.with_redis do |r|
|
22
|
+
while record_ids.size < limit && (record_id = r.rpop(redis_key))
|
23
|
+
record_ids << record_id
|
24
|
+
end
|
25
|
+
end
|
26
|
+
record_ids
|
20
27
|
end
|
21
|
-
record_ids.to_a
|
22
28
|
end
|
23
29
|
|
24
30
|
def clear
|
@@ -34,5 +40,13 @@ module Searchkick
|
|
34
40
|
def redis_key
|
35
41
|
"searchkick:reindex_queue:#{name}"
|
36
42
|
end
|
43
|
+
|
44
|
+
def supports_rpop_with_count?
|
45
|
+
redis_version >= Gem::Version.new("6.2")
|
46
|
+
end
|
47
|
+
|
48
|
+
def redis_version
|
49
|
+
@redis_version ||= Searchkick.with_redis { |r| Gem::Version.new(r.info["redis_version"]) }
|
50
|
+
end
|
37
51
|
end
|
38
52
|
end
|
data/lib/searchkick/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: searchkick
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.5.
|
4
|
+
version: 4.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
requirements: []
|
105
|
-
rubygems_version: 3.2.
|
105
|
+
rubygems_version: 3.2.22
|
106
106
|
signing_key:
|
107
107
|
specification_version: 4
|
108
108
|
summary: Intelligent search made easy with Rails and Elasticsearch
|