mongodb_meilisearch 1.1.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c7873b1a21e75522aa4fdaa063231997319faae90ddb9a4774cd814bf18a4afc
4
- data.tar.gz: b4f241003a1ff709c1247f6411cec39831459795d8e17c429a9b7b187ff790cd
3
+ metadata.gz: ff219e5de4c77b4b06515946701f57eee82588691ec7931d963a70011409c79a
4
+ data.tar.gz: c51b7f234431417abe62fdd5365a106b4d493fe9e49b7802726cdd61a519db48
5
5
  SHA512:
6
- metadata.gz: 8ad38b1b7f7c14baaee4c12491affeb62c9b9a700ec41d3bddcdf3c095288c084c9bf8f6c9feb28300b441e5fd94380179c9f334c7d2df078d48410221fbc05f
7
- data.tar.gz: 5792131d06698d2af16194078e1d5a8bfbf37b9084502f25183d5f3c347d712d2eeac7e604edf0298800a03795e573336adbdc9a5b1d47929691f9288e974027
6
+ metadata.gz: b21b329983c8ac89de3e8543cccb021e63a7d1411b0cb464885ea3019fe815f7f72de8f408da1bc18d38cc2ebeac929f5491ec643ee3ea5e8a102dde3c582aae
7
+ data.tar.gz: 4c44d1ae3784917566bd6a1a2bb3993a718fe57d5cf97e7e9af21587a3587fda1d1c77764606ad21dd06b9c8e107eff82e7173d8d019ecd2e18dad46094a19a9
data/CHANGELOG.md CHANGED
@@ -1,3 +1,52 @@
1
+ ## [1.2.0] - 2024-06-19
2
+
3
+ ### Features
4
+ - The value of `SEARCHABLE_ATTRIBUTES` can now optionally
5
+ include method names, not just field names.
6
+
7
+ This makes for easier incorporation of dynamically generated index values,
8
+ because it eliminates many cases where you would have had to define
9
+ a `search_indexable_hash` method. If you already have one, it'll
10
+ continue to work.
11
+
12
+ ## [1.1.1] 2023-11-13
13
+ bug fix
14
+
15
+ ### Fixes
16
+
17
+ Issue #7 - adding the first document from a new model didn't
18
+ configure the filterable attributes or searchable attributes.
19
+ The lack of the former would cause basic searches to fail
20
+ because of our expectation that "object_class" will always
21
+ be a filterable field unless you've specifically designated
22
+ your model as unfilterable.
23
+
24
+
25
+ ## [1.1.0] - 2023-09-16
26
+ Sorting & Filtering
27
+
28
+ ## Additions
29
+ - adds the ability to specify sortable attributes
30
+ - these default to match the filterable attributes
31
+ - filterable attributes still default to match
32
+ searchable attributes
33
+ - `set_filterable_attributes`
34
+ - `set_sortable_attributes`
35
+ - `set_sortable_attributes!`
36
+ - `reindex` and `reindex!` now set searchable attributes
37
+
38
+ ## Fixes
39
+ - `set_filterable_attributes!` is now synchronous as the name implies
40
+ - `reindex_core` correctly honors the user's async request when
41
+ setting filterable attributes (previously it was always async)
42
+
43
+ ## [1.0.1] - 2023-09-2
44
+
45
+ ids from `belongs_to` relations are no longer
46
+ indexed by default. You can explicitly specify
47
+ their inclusion if you want.
48
+
49
+
1
50
  ## [1.0.0] - 2023-07-22
2
51
 
3
52
  - Initial release
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mongodb_meilisearch (1.1.1)
4
+ mongodb_meilisearch (1.3.0)
5
5
  meilisearch
6
6
  mongoid (~> 7.0)
7
7
  rails
data/README.md CHANGED
@@ -43,7 +43,7 @@ The url below is the default one Meilisearch uses when run locally.
43
43
 
44
44
  ```bash
45
45
  SEARCH_ENABLED=true
46
- MEILISEARCH_API_KEY=<your api key here>
46
+ MEILI_MASTER_KEY=<your api key here>
47
47
  MEILISEARCH_URL=http://127.0.0.1:7700
48
48
 
49
49
  ```
@@ -169,16 +169,19 @@ unless you intend to allow users to sort by when a record was created,
169
169
  there's no point in recording it's `created_at` in the search index.
170
170
  It'll just waste bandwidth, memory, and disk space.
171
171
 
172
- Define a `SEARCHABLE_ATTRIBUTES` constant with an array of strings to limit things.
173
- By default these will _also_ be the fields you can filter on. Note that
174
- Meilisearch requires there to be an `id` field and it must be a string.
172
+ Define a `SEARCHABLE_ATTRIBUTES` constant with an array of strings to limit things.
173
+ These are the field names, and/or names of methods you wish to have indexed.
174
+
175
+ By default these will _also_ be the fields you can filter on.
176
+
177
+ Note that Meilisearch requires there to be an `id` field and it must be a string.
175
178
  If you don't define one it will use string version of the `_id` your
176
179
  document's `BSON::ObjectId`.
177
180
 
178
181
  ```ruby
179
182
  # explicitly define the fields you want to be searchable
180
183
  # this should be an array of symbols
181
- SEARCHABLE_ATTRIBUTES = %i[title body]
184
+ SEARCHABLE_ATTRIBUTES = %w[title body]
182
185
  # OR explicitly define the fields you DON'T want searchable
183
186
  SEARCHABLE_ATTRIBUTES = searchable_attributes - [:created_at]
184
187
  ```
@@ -194,9 +197,16 @@ exclude any fields that are `Mongoid::Fields::ForeignKey` objects.
194
197
 
195
198
  #### Getting Extra Specific
196
199
  If your searchable data needs to by dynamically generated instead of
197
- just taken directly from the `Mongoid::Document`'s attributes you can
198
- define a `search_indexable_hash` method on your class. This method
199
- must return a hash, and that hash must include the following keys:
200
+ just taken directly from the `Mongoid::Document`'s attributes or
201
+ existing methods you can define a `search_indexable_hash` method on your class.
202
+
203
+ Before you do, please note that as of v1.1 your `SEARCHABLE_ATTRIBUTES`
204
+ constant can contain fields and method names in its array of values. Making
205
+ a method for each thing dynamically generated thing you want in the search
206
+ and then including it in SEARCHABLE_ATTRIBUTES is going to be
207
+ the easiest way of accomplishing this.
208
+
209
+ Your `search_indexable_hash` must return a hash, and that hash must include the following keys:
200
210
  - `"id"` - a string that uniquely identifies the record
201
211
  - `"object_class"` the name of the class that this record corresponds to.
202
212
 
@@ -5,5 +5,5 @@ module MongodbMeilisearch
5
5
  # @note This library will adhere to strict semantic versioning.
6
6
  # See https://semver.org/
7
7
  #
8
- VERSION = "1.1.1"
8
+ VERSION = "1.3.0"
9
9
  end
data/lib/search/client.rb CHANGED
@@ -8,7 +8,8 @@ module Search
8
8
  def initialize
9
9
  if ENV.fetch("SEARCH_ENABLED", "true") == "true"
10
10
  url = ENV.fetch("MEILISEARCH_URL")
11
- api_key = ENV.fetch("MEILISEARCH_API_KEY")
11
+ # MEILISEARCH_API_KEY is for mongodb_meilisearch v1.2.1 & earlier
12
+ api_key = ENV.fetch("MEILI_MASTER_KEY") || ENV.fetch("MEILISEARCH_API_KEY")
12
13
  timeout = ENV.fetch("MEILISEARCH_TIMEOUT", 10).to_i
13
14
  max_retries = ENV.fetch("MEILISEARCH_MAX_RETRIES", 2).to_i
14
15
  if url.present? && api_key.present?
@@ -44,6 +44,10 @@ module Search
44
44
  search_index.delete_document!(send(primary_search_key).to_s)
45
45
  end
46
46
 
47
+ def searchable_attributes
48
+ self.class.searchable_attributes
49
+ end
50
+
47
51
  # returns a hash of all the attributes
48
52
  # if searchable_attributes method is defined
49
53
  # it is assumed to return a list of symbols
@@ -57,9 +61,10 @@ module Search
57
61
  # in returned results
58
62
  def search_indexable_hash
59
63
  klass = self.class
60
- hash = attributes
61
- .to_h
62
- .slice(* klass.searchable_attributes.map { |a| a.to_s })
64
+ # the to_s & to_sym is just safety in case someone
65
+ # defined searchable_attributes as an array of strings
66
+ hash = {}
67
+ searchable_attributes.each { |a| hash[a.to_s] = send(a.to_sym) }
63
68
 
64
69
  # Meilisearch doesn't like a primary key of _id
65
70
  # but Mongoid ids are _id
@@ -69,7 +74,7 @@ module Search
69
74
  id = hash.delete("_id").to_s
70
75
  new_id = (!klass.has_class_prefixed_search_ids?) ? id : "#{self.class.name}_#{id}"
71
76
  hash["id"] = new_id
72
- elsif hash.has_key?("id") && !hash[id].is_a?(String)
77
+ elsif hash.has_key?("id") && !hash["id"].is_a?(String)
73
78
  # this is mostly in case it's a BSON::ObjectId
74
79
  hash["id"] = hash["id"].to_s
75
80
  elsif !hash.has_key?("id")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongodb_meilisearch
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - masukomi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-13 00:00:00.000000000 Z
11
+ date: 2024-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails