redi_search 2.0.2 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/lint.yml +13 -11
- data/.github/workflows/tests.yml +19 -14
- data/.rubocop.yml +71 -5
- data/Appraisals +8 -4
- data/Gemfile +3 -2
- data/README.md +15 -33
- data/Rakefile +1 -0
- data/bin/console +6 -2
- data/gemfiles/{activerecord_51.gemfile → activerecord_60.gemfile} +4 -2
- data/gemfiles/{activerecord_52.gemfile → activerecord_61.gemfile} +4 -2
- data/gemfiles/activerecord_70.gemfile +15 -0
- data/lib/redi_search/add_field.rb +1 -1
- data/lib/redi_search/client/response.rb +1 -1
- data/lib/redi_search/client.rb +15 -5
- data/lib/redi_search/create.rb +2 -1
- data/lib/redi_search/document/display.rb +4 -4
- data/lib/redi_search/document/finder.rb +12 -50
- data/lib/redi_search/document.rb +11 -16
- data/lib/redi_search/hset.rb +28 -0
- data/lib/redi_search/index.rb +19 -17
- data/lib/redi_search/lazily_load.rb +2 -2
- data/lib/redi_search/log_subscriber.rb +7 -6
- data/lib/redi_search/model.rb +4 -10
- data/lib/redi_search/schema/field.rb +10 -2
- data/lib/redi_search/schema/geo_field.rb +1 -1
- data/lib/redi_search/schema/numeric_field.rb +1 -1
- data/lib/redi_search/schema/tag_field.rb +5 -1
- data/lib/redi_search/schema/text_field.rb +1 -1
- data/lib/redi_search/schema.rb +10 -5
- data/lib/redi_search/search/clauses/boolean.rb +4 -4
- data/lib/redi_search/search/clauses/or.rb +1 -1
- data/lib/redi_search/search/result.rb +2 -2
- data/lib/redi_search/search.rb +1 -1
- data/lib/redi_search/spellcheck/result.rb +4 -4
- data/lib/redi_search/spellcheck.rb +1 -1
- data/lib/redi_search/version.rb +1 -1
- data/redi_search.gemspec +3 -3
- metadata +15 -14
- data/lib/redi_search/add.rb +0 -67
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 140fad214c11689ac648949c29c17409c96164ca68e9c6cc5cb694b291aa685c
|
4
|
+
data.tar.gz: 7ba282b0a28eb08c5a8064d3d26afd6c1b97935991f55bd5b69ff50c5a3b7eec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df96fa21f24f4fec24c66c64b447775a01eb9de86fbf5b30fd028a101363f8036e612d2a2d9b49ed4f09c6dcc14bbcbe7f9a9893be5dcc4dcec7aa4a75db9c95
|
7
|
+
data.tar.gz: 63c12659be3dc7fdfd790c5f4bab980e970ae5943273c2bda750ba0b43c0ddab50390cb718193130ee7658dd6b6384eed96881619ce49699bb7914c5687643fc
|
data/.github/workflows/lint.yml
CHANGED
@@ -1,20 +1,22 @@
|
|
1
1
|
name: lint
|
2
2
|
|
3
|
-
on:
|
3
|
+
on:
|
4
|
+
pull_request:
|
5
|
+
push:
|
6
|
+
branches:
|
7
|
+
- master
|
4
8
|
|
5
9
|
jobs:
|
6
10
|
lint:
|
7
11
|
runs-on: ubuntu-latest
|
8
12
|
steps:
|
9
|
-
- uses: actions/checkout@
|
10
|
-
- name: Set up Ruby
|
11
|
-
uses:
|
13
|
+
- uses: actions/checkout@v2
|
14
|
+
- name: Set up Ruby 3.0
|
15
|
+
uses: ruby/setup-ruby@v1
|
12
16
|
with:
|
13
|
-
ruby-version:
|
14
|
-
- name: Install
|
17
|
+
ruby-version: 3.0
|
18
|
+
- name: Install rubocop
|
15
19
|
run: |
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
- name: Run tests
|
20
|
-
run: bundle exec rubocop --config=./.rubocop.yml --parallel
|
20
|
+
gem install rubocop rubocop-performance rubocop-minitest rubocop-rake
|
21
|
+
- name: Lint
|
22
|
+
run: rubocop --config=./.rubocop.yml --parallel
|
data/.github/workflows/tests.yml
CHANGED
@@ -1,20 +1,25 @@
|
|
1
1
|
name: tests
|
2
2
|
|
3
|
-
on:
|
3
|
+
on:
|
4
|
+
pull_request:
|
5
|
+
push:
|
6
|
+
branches:
|
7
|
+
- master
|
4
8
|
|
5
9
|
jobs:
|
6
10
|
unit:
|
7
11
|
runs-on: ubuntu-latest
|
8
12
|
strategy:
|
9
13
|
matrix:
|
10
|
-
ruby: [ '2.
|
11
|
-
gemfile: [ 'Gemfile', 'gemfiles/
|
14
|
+
ruby: [ '2.7', '3.0' ]
|
15
|
+
gemfile: [ 'Gemfile', 'gemfiles/activerecord_60.gemfile', 'gemfiles/activerecord_61.gemfile', 'gemfiles/activerecord_70.gemfile' ]
|
12
16
|
steps:
|
13
|
-
- uses: actions/checkout@
|
17
|
+
- uses: actions/checkout@v2
|
14
18
|
- name: Set up Ruby ${{ matrix.ruby }}
|
15
|
-
uses:
|
19
|
+
uses: ruby/setup-ruby@v1
|
16
20
|
with:
|
17
21
|
ruby-version: ${{ matrix.ruby }}
|
22
|
+
bundler-cache: false
|
18
23
|
- name: Install dependencies
|
19
24
|
run: |
|
20
25
|
sudo apt-get install libsqlite3-dev -y
|
@@ -24,21 +29,21 @@ jobs:
|
|
24
29
|
run: BUNDLE_GEMFILE=${{ matrix.gemfile }} bundle exec rake test:unit
|
25
30
|
integration:
|
26
31
|
runs-on: ubuntu-latest
|
27
|
-
|
28
|
-
|
29
|
-
|
32
|
+
services:
|
33
|
+
redisearch:
|
34
|
+
image: redislabs/redisearch:2.0.12
|
35
|
+
ports:
|
36
|
+
- 6379:6379
|
30
37
|
steps:
|
31
|
-
- uses: actions/checkout@
|
32
|
-
- name: Set up Ruby
|
33
|
-
uses:
|
38
|
+
- uses: actions/checkout@v2
|
39
|
+
- name: Set up Ruby 3.0
|
40
|
+
uses: ruby/setup-ruby@v1
|
34
41
|
with:
|
35
|
-
ruby-version:
|
42
|
+
ruby-version: 3.0
|
36
43
|
- name: Install dependencies
|
37
44
|
run: |
|
38
45
|
sudo apt-get install libsqlite3-dev -y
|
39
|
-
gem install bundler --no-document
|
40
46
|
bundle install
|
41
|
-
docker run -d -p 6379:6379 redislabs/redisearch:${{ matrix.redi_search }} --protected-mode no --loadmodule /usr/lib/redis/modules/redisearch.so
|
42
47
|
- name: Run tests
|
43
48
|
run: |
|
44
49
|
bundle exec rake test:integration
|
data/.rubocop.yml
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
require:
|
2
|
+
- rubocop-minitest
|
2
3
|
- rubocop-performance
|
4
|
+
- rubocop-rake
|
3
5
|
AllCops:
|
6
|
+
NewCops: enable
|
4
7
|
Exclude:
|
5
8
|
- vendor/**/*
|
6
9
|
- Gemfile.lock
|
@@ -9,7 +12,8 @@ AllCops:
|
|
9
12
|
- tmp/**/*
|
10
13
|
- test/dummy/db/schema.rb
|
11
14
|
- gemfiles/**/*
|
12
|
-
|
15
|
+
- bin/**/*
|
16
|
+
TargetRubyVersion: 2.7
|
13
17
|
|
14
18
|
# Department Bundler
|
15
19
|
Bundler/DuplicatedGem:
|
@@ -611,7 +615,7 @@ Lint/UselessAssignment:
|
|
611
615
|
StyleGuide: https://github.com/bbatsov/ruby-style-guide#underscore-unused-vars
|
612
616
|
Enabled: true
|
613
617
|
|
614
|
-
Lint/
|
618
|
+
Lint/BinaryOperatorWithIdenticalOperands:
|
615
619
|
Description: Checks for comparison of something with itself.
|
616
620
|
Enabled: true
|
617
621
|
|
@@ -1197,9 +1201,6 @@ Style/MethodDefParentheses:
|
|
1197
1201
|
StyleGuide: https://github.com/bbatsov/ruby-style-guide#method-parens
|
1198
1202
|
Enabled: true
|
1199
1203
|
|
1200
|
-
Style/MethodMissingSuper:
|
1201
|
-
Enabled: true
|
1202
|
-
|
1203
1204
|
Style/MissingRespondToMissing:
|
1204
1205
|
Enabled: true
|
1205
1206
|
|
@@ -1630,5 +1631,70 @@ Style/RedundantRegexpCharacterClass:
|
|
1630
1631
|
Enabled: true
|
1631
1632
|
Style/RedundantRegexpEscape:
|
1632
1633
|
Enabled: true
|
1634
|
+
Lint/MissingSuper:
|
1635
|
+
Enabled: false
|
1636
|
+
|
1637
|
+
|
1638
|
+
|
1639
|
+
Lint/DuplicateElsifCondition:
|
1640
|
+
Enabled: true
|
1641
|
+
Lint/DuplicateRescueException:
|
1642
|
+
Enabled: true
|
1643
|
+
Lint/EmptyConditionalBody:
|
1644
|
+
Enabled: true
|
1645
|
+
Lint/FloatComparison:
|
1646
|
+
Enabled: true
|
1647
|
+
Lint/OutOfRangeRegexpRef:
|
1648
|
+
Enabled: true
|
1649
|
+
Lint/SelfAssignment:
|
1650
|
+
Enabled: true
|
1651
|
+
Lint/TopLevelReturnWithArgument:
|
1652
|
+
Enabled: true
|
1653
|
+
Lint/UnreachableLoop:
|
1654
|
+
Enabled: true
|
1655
|
+
Style/AccessorGrouping:
|
1656
|
+
Enabled: true
|
1657
|
+
Style/ArrayCoercion:
|
1658
|
+
Enabled: true
|
1659
|
+
Style/BisectedAttrAccessor:
|
1660
|
+
Enabled: true
|
1661
|
+
Style/CaseLikeIf:
|
1662
|
+
Enabled: true
|
1663
|
+
Style/ExplicitBlockArgument:
|
1664
|
+
Enabled: false
|
1665
|
+
Style/GlobalStdStream:
|
1666
|
+
Enabled: true
|
1667
|
+
Style/HashAsLastArrayItem:
|
1668
|
+
Enabled: false
|
1669
|
+
Style/HashLikeCase:
|
1670
|
+
Enabled: true
|
1671
|
+
Style/OptionalBooleanParameter:
|
1672
|
+
Enabled: true
|
1673
|
+
Style/RedundantAssignment:
|
1674
|
+
Enabled: true
|
1633
1675
|
Style/RedundantFetchBlock:
|
1634
1676
|
Enabled: true
|
1677
|
+
Style/RedundantFileExtensionInRequire:
|
1678
|
+
Enabled: true
|
1679
|
+
Style/SingleArgumentDig:
|
1680
|
+
Enabled: true
|
1681
|
+
Style/StringConcatenation:
|
1682
|
+
Enabled: true
|
1683
|
+
Performance/AncestorsInclude:
|
1684
|
+
Enabled: true
|
1685
|
+
Performance/BigDecimalWithNumericArgument:
|
1686
|
+
Enabled: true
|
1687
|
+
Performance/RedundantSortBlock:
|
1688
|
+
Enabled: true
|
1689
|
+
Performance/RedundantStringChars:
|
1690
|
+
Enabled: true
|
1691
|
+
Performance/ReverseFirst:
|
1692
|
+
Enabled: true
|
1693
|
+
Performance/SortReverse:
|
1694
|
+
Enabled: true
|
1695
|
+
Performance/Squeeze:
|
1696
|
+
Enabled: true
|
1697
|
+
Performance/StringInclude:
|
1698
|
+
Enabled: true
|
1699
|
+
Minitest/AssertionInLifecycleHook:
|
1700
|
+
Enabled: false
|
data/Appraisals
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
appraise "activerecord-
|
4
|
-
gem "activerecord", "< 6.
|
3
|
+
appraise "activerecord-60" do
|
4
|
+
gem "activerecord", "< 6.1", ">= 6.0"
|
5
5
|
end
|
6
6
|
|
7
|
-
appraise "activerecord-
|
8
|
-
gem "activerecord", "<
|
7
|
+
appraise "activerecord-61" do
|
8
|
+
gem "activerecord", "< 6.2", ">= 6.1"
|
9
|
+
end
|
10
|
+
|
11
|
+
appraise "activerecord-70" do
|
12
|
+
gem "activerecord", "~> 7.0.0.alpha1"
|
9
13
|
end
|
data/Gemfile
CHANGED
@@ -9,10 +9,11 @@ gemspec
|
|
9
9
|
gem "appraisal", "~> 2.2"
|
10
10
|
gem "faker"
|
11
11
|
gem "mocha"
|
12
|
-
gem "pry"
|
13
12
|
gem "rubocop"
|
13
|
+
gem "rubocop-minitest"
|
14
14
|
gem "rubocop-performance"
|
15
|
+
gem "rubocop-rake"
|
15
16
|
gem "simplecov"
|
16
17
|
gem "sqlite3"
|
17
18
|
|
18
|
-
gem "activerecord", "~> 6.
|
19
|
+
gem "activerecord", "~> 6.1"
|
data/README.md
CHANGED
@@ -7,7 +7,6 @@
|
|
7
7
|
# RediSearch
|
8
8
|
|
9
9
|
![Build Status](https://github.com/npezza93/redi_search/workflows/tests/badge.svg)
|
10
|
-
[![Test Coverage](https://api.codeclimate.com/v1/badges/c6437acac5684de2549d/test_coverage)](https://codeclimate.com/github/npezza93/redi_search/test_coverage)
|
11
10
|
[![Maintainability](https://api.codeclimate.com/v1/badges/c6437acac5684de2549d/maintainability)](https://codeclimate.com/github/npezza93/redi_search/maintainability)
|
12
11
|
|
13
12
|
A simple, but powerful, Ruby wrapper around RediSearch, a search engine on top of
|
@@ -244,13 +243,11 @@ With no options: `{ place: :geo }`
|
|
244
243
|
|
245
244
|
## Document
|
246
245
|
|
247
|
-
A `Document` is the Ruby representation of a
|
246
|
+
A `Document` is the Ruby representation of a Redis hash.
|
248
247
|
|
249
|
-
You can fetch a `Document` using `.get`
|
248
|
+
You can fetch a `Document` using `.get` class methods.
|
250
249
|
- `get(index, document_id)` fetches a single `Document` in an `Index` for a
|
251
250
|
given `document_id`.
|
252
|
-
- `mget(index, *document_ids)` fetches a collection of `Document`s
|
253
|
-
in an `Index` for the given `document_ids`.
|
254
251
|
|
255
252
|
You can also make a `Document` instance using the
|
256
253
|
`.for_object(index, record, serializer: nil, only: [])` class method. It takes
|
@@ -269,10 +266,7 @@ to override each other. There is also a `#document_id_without_index` method
|
|
269
266
|
which removes the prepended index name.
|
270
267
|
|
271
268
|
Finally there is a `#del` method that will remove the `Document` from the
|
272
|
-
`Index`.
|
273
|
-
whether the `Document` should be completely removed from the Redis instance vs
|
274
|
-
just the `Index`.
|
275
|
-
|
269
|
+
`Index`.
|
276
270
|
|
277
271
|
## Index
|
278
272
|
|
@@ -314,42 +308,32 @@ RediSearch::Index.new(name_of_index, schema)
|
|
314
308
|
- If set, we avoid saving the term frequencies in the index. This saves
|
315
309
|
memory but does not allow sorting based on the frequencies of a given
|
316
310
|
term within the document.
|
317
|
-
- `drop`
|
311
|
+
- `drop(keep_docs: false)`
|
318
312
|
- Drops the `Index` from the Redis instance, returns a boolean. Has an
|
319
313
|
accompanying bang method that will raise an exception upon failure. Will
|
320
|
-
return `false` if the `Index` has already been dropped.
|
314
|
+
return `false` if the `Index` has already been dropped. Takes an option
|
315
|
+
keyword arg, `keep_docs`, that will by default remove all the document
|
316
|
+
hashes in Redis.
|
321
317
|
- `exist?`
|
322
318
|
- Returns a boolean signifying `Index` existence.
|
323
319
|
- `info`
|
324
320
|
- Returns a struct object with all the information about the `Index`.
|
325
321
|
- `fields`
|
326
322
|
- Returns an array of the field names in the `Index`.
|
327
|
-
- `add(document
|
328
|
-
- Takes a `Document` object
|
323
|
+
- `add(document)`
|
324
|
+
- Takes a `Document` object. Has an
|
329
325
|
accompanying bang method that will raise an exception upon failure.
|
330
|
-
|
331
|
-
- `language` -> Use a stemmer for the supplied language during indexing.
|
332
|
-
- `no_save` -> Don't save the actual `Document` in the database and only index it.
|
333
|
-
- `replace` -> Accepts a boolean or a hash. If a truthy value is passed, we
|
334
|
-
will do an UPSERT style insertion - and delete an older version of the
|
335
|
-
`Document` if it exists.
|
336
|
-
- `replace: { partial: true }` -> Allows you to not have to specify all
|
337
|
-
fields for reindexing. Fields not given to the command will be loaded from
|
338
|
-
the current version of the `Document`.
|
339
|
-
- `add_multiple(documents, score: 1.0, replace: {}, language: nil, no_save: false)`
|
326
|
+
- `add_multiple(documents)`
|
340
327
|
- Takes an array of `Document` objects. This provides a more performant way to
|
341
328
|
add multiple documents to the `Index`. Accepts the same options as `add`.
|
342
|
-
- `del(document
|
343
|
-
- Removes a `Document` from the `Index`.
|
344
|
-
`Document` should be completely removed from the Redis instance vs just the
|
345
|
-
`Index`.
|
329
|
+
- `del(document)`
|
330
|
+
- Removes a `Document` from the `Index`.
|
346
331
|
- `document_count`
|
347
332
|
- Returns the number of `Document`s in the `Index`
|
348
333
|
- `add_field(field_name, schema)`
|
349
334
|
- Adds a new field to the `Index`. Ex: `index.add_field(:first_name, text: { phonetic: "dm:en" })`
|
350
|
-
- `reindex(documents, recreate: false
|
335
|
+
- `reindex(documents, recreate: false)`
|
351
336
|
- If `recreate` is `true` the `Index` will be dropped and recreated
|
352
|
-
- `options` accepts the same options as `add`
|
353
337
|
|
354
338
|
|
355
339
|
## Searching
|
@@ -521,11 +505,9 @@ end
|
|
521
505
|
This will automatically add `User.search` and `User.spellcheck`
|
522
506
|
methods which behave the same as if you called them on an `Index` instance.
|
523
507
|
|
524
|
-
`User.reindex(recreate: false, only: []
|
508
|
+
`User.reindex(recreate: false, only: [])` is also added and behaves
|
525
509
|
similarly to `RediSearch::Index#reindex`. Some of the differences include:
|
526
|
-
-
|
527
|
-
option `replace: { partial: true }`.
|
528
|
-
- `Document`s do not to be passed as the first parameter. The `search_import`
|
510
|
+
- `Document`s do not need to be passed as the first parameter. The `search_import`
|
529
511
|
scope is automatically called and all the records are converted
|
530
512
|
to `Document`s.
|
531
513
|
- Accepts an optional `only` parameter where you can specify a limited number
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
@@ -5,7 +5,7 @@ require "bundler/setup"
|
|
5
5
|
require "redi_search"
|
6
6
|
|
7
7
|
require "faker"
|
8
|
-
require "
|
8
|
+
require "irb"
|
9
9
|
require "active_support/logger"
|
10
10
|
require "active_record"
|
11
11
|
|
@@ -34,4 +34,8 @@ def seed_users(count = 10_000)
|
|
34
34
|
User.reindex
|
35
35
|
end
|
36
36
|
|
37
|
-
|
37
|
+
def reload!
|
38
|
+
exec($0)
|
39
|
+
end
|
40
|
+
|
41
|
+
IRB.start
|
@@ -2,12 +2,14 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
+
gem "appraisal", "~> 2.2"
|
6
|
+
gem "faker"
|
5
7
|
gem "mocha"
|
6
|
-
gem "pry"
|
7
8
|
gem "rubocop"
|
9
|
+
gem "rubocop-minitest"
|
8
10
|
gem "rubocop-performance"
|
9
11
|
gem "simplecov"
|
10
12
|
gem "sqlite3"
|
11
|
-
gem "activerecord", "<
|
13
|
+
gem "activerecord", "< 6.1", ">= 6.0"
|
12
14
|
|
13
15
|
gemspec path: "../"
|
@@ -2,12 +2,14 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
+
gem "appraisal", "~> 2.2"
|
6
|
+
gem "faker"
|
5
7
|
gem "mocha"
|
6
|
-
gem "pry"
|
7
8
|
gem "rubocop"
|
9
|
+
gem "rubocop-minitest"
|
8
10
|
gem "rubocop-performance"
|
9
11
|
gem "simplecov"
|
10
12
|
gem "sqlite3"
|
11
|
-
gem "activerecord", "< 6.
|
13
|
+
gem "activerecord", "< 6.2", ">= 6.1"
|
12
14
|
|
13
15
|
gemspec path: "../"
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "appraisal", "~> 2.2"
|
6
|
+
gem "faker"
|
7
|
+
gem "mocha"
|
8
|
+
gem "rubocop"
|
9
|
+
gem "rubocop-minitest"
|
10
|
+
gem "rubocop-performance"
|
11
|
+
gem "simplecov"
|
12
|
+
gem "sqlite3"
|
13
|
+
gem "activerecord", "~> 7.0.0.alpha1"
|
14
|
+
|
15
|
+
gemspec path: "../"
|