dina 0.4.0.0 → 0.4.1.0
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/lib/dina/models/person.rb +20 -0
- data/lib/dina/search/base_search.rb +22 -6
- data/lib/dina/search/search.rb +7 -2
- data/lib/dina/search/search_autocomplete.rb +10 -2
- data/lib/dina/search/search_count.rb +8 -3
- data/lib/dina/search/search_mapping.rb +5 -1
- data/lib/dina/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22dfd46dbbd51273c78e8b7375019e89cc503b13af20cf9abd17961c68809a56
|
4
|
+
data.tar.gz: f757ac80f3722120a738c40eae3bef2826ec8e3aac48af0645a94e34c091e1b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a72ed340fed58472d60fe7b6c47e7e3fe339378d076c4636f53cb0d32d402b0e8a408c5123bcb79683824bcb6d3d9e55ca9f308d6bbaf820fd88769b8bf4db1
|
7
|
+
data.tar.gz: 98c98900dcfeeeb17ac1bad224c99ff80d56a060cf9096af16b4eb48e44584617eeaa82d2b4d7e29817256698ee36272c37d3cc65652b4e6b275e9caf91f7c65
|
data/lib/dina/models/person.rb
CHANGED
@@ -35,6 +35,26 @@ module Dina
|
|
35
35
|
where("email": email).all
|
36
36
|
end
|
37
37
|
|
38
|
+
def self.search_by_name(name)
|
39
|
+
payload = {
|
40
|
+
query: {
|
41
|
+
multi_match: {
|
42
|
+
query: name,
|
43
|
+
type: :cross_fields,
|
44
|
+
fields: [
|
45
|
+
"data.attributes.familyNames^3",
|
46
|
+
"data.attributes.givenNames",
|
47
|
+
"data.attributes.displayName^5",
|
48
|
+
"data.attributes.aliases",
|
49
|
+
"data.attributes.displayName.autocomplete"
|
50
|
+
]
|
51
|
+
}
|
52
|
+
}
|
53
|
+
}
|
54
|
+
hits = Dina::Search.execute(index: "agent", payload: payload)[:hits]
|
55
|
+
hits.map{|a| self.find(a[:_source][:data][:id]).first }
|
56
|
+
end
|
57
|
+
|
38
58
|
private
|
39
59
|
|
40
60
|
def on_before_save
|
@@ -2,26 +2,42 @@ module Dina
|
|
2
2
|
class BaseSearch
|
3
3
|
|
4
4
|
def self.endpoint
|
5
|
-
|
5
|
+
Dina::Authentication.endpoint_url
|
6
6
|
end
|
7
7
|
|
8
8
|
def self.endpoint_path
|
9
9
|
"search-api/search-ws/"
|
10
10
|
end
|
11
11
|
|
12
|
+
# Sets the search index name
|
13
|
+
#
|
14
|
+
# @param index [String] the search index; options are "agent", "material_sample", "object_store"
|
15
|
+
#
|
16
|
+
# @return [String] the internally-recognized search index name
|
12
17
|
def self.index_name(index:)
|
13
18
|
return nil if !index
|
14
19
|
"dina_#{index}_index"
|
15
20
|
end
|
16
21
|
|
22
|
+
# Executes a search
|
23
|
+
#
|
24
|
+
# @param params [Hash] the parameters to be included in the endpoint URL
|
25
|
+
# @param method [Symbol] the request type as :get or :post
|
26
|
+
# @param payload [Hash] the elasticsearch query
|
27
|
+
#
|
28
|
+
# @return [Hash] the search response with symbolized keys
|
17
29
|
def self.execute(params, method: :get, payload: {})
|
18
30
|
begin
|
19
31
|
response = RestClient::Request.execute(
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
32
|
+
method: method,
|
33
|
+
url: endpoint + endpoint_path + "?" + params.to_query,
|
34
|
+
payload: payload.to_json,
|
35
|
+
headers: {
|
36
|
+
accept: 'application/json',
|
37
|
+
content_type: 'application/json',
|
38
|
+
authorization: Dina::Authentication.header
|
39
|
+
}
|
40
|
+
)
|
25
41
|
JSON.parse(response, symbolize_names: true)
|
26
42
|
rescue RestClient::ExceptionWithResponse => e
|
27
43
|
e.response
|
data/lib/dina/search/search.rb
CHANGED
@@ -7,8 +7,13 @@ module Dina
|
|
7
7
|
"search-api/search-ws/search"
|
8
8
|
end
|
9
9
|
|
10
|
-
#
|
11
|
-
#
|
10
|
+
# Executes a search
|
11
|
+
#
|
12
|
+
# @param index [String] the index, accepted value is one of "agent", "material_sample", "object_store"
|
13
|
+
# @param payload [Hash] the payload hash as an Elasticsearch-formatted body
|
14
|
+
# => { query: { match_all: {} }
|
15
|
+
#
|
16
|
+
# @return [Hash] the search result with symbolized keys
|
12
17
|
def self.execute(index:, payload: { query: { match_all: {} } })
|
13
18
|
params = {
|
14
19
|
indexName: index_name(index: index)
|
@@ -7,11 +7,19 @@ module Dina
|
|
7
7
|
"search-api/search-ws/auto-complete"
|
8
8
|
end
|
9
9
|
|
10
|
-
#
|
11
|
-
#
|
10
|
+
# Executes an autocomplete search
|
11
|
+
#
|
12
|
+
# Known field values (dependent on chosen index):
|
12
13
|
# agent: data.attributes.displayName
|
13
14
|
# material_sample: included.attributes.dwcRecordedBy, included.attributes.verbatimDeterminer
|
14
15
|
# object_store: none
|
16
|
+
#
|
17
|
+
# @param term [String] the search term
|
18
|
+
# @param index [String] the index, accepted value is one of "agent", "material_sample", "object_store"
|
19
|
+
# @param field [String]
|
20
|
+
# @param group [String] the DINA group name
|
21
|
+
#
|
22
|
+
# @return [Hash] the search result with symbolized keys
|
15
23
|
def self.execute(term:, index:, field: nil, group: nil)
|
16
24
|
params = {
|
17
25
|
prefix: term,
|
@@ -7,9 +7,14 @@ module Dina
|
|
7
7
|
"search-api/search-ws/count"
|
8
8
|
end
|
9
9
|
|
10
|
-
#
|
11
|
-
#
|
12
|
-
|
10
|
+
# Executes an count search
|
11
|
+
#
|
12
|
+
# @param index [String] the index, accepted value is one of "agent", "material_sample", "object_store"
|
13
|
+
# @param payload [Hash] the Elasticsearch query hash
|
14
|
+
# => Example: {query: {bool: {filter: {term: {"data.attributes.group": "dao"}}}}}
|
15
|
+
#
|
16
|
+
# @return [Integer] the count of items in the index according to the query/filter
|
17
|
+
def self.execute(index:, payload: { query: { match_all: {} }})
|
13
18
|
params = {
|
14
19
|
indexName: index_name(index: index)
|
15
20
|
}
|
@@ -7,7 +7,11 @@ module Dina
|
|
7
7
|
"search-api/search-ws/mapping"
|
8
8
|
end
|
9
9
|
|
10
|
-
#
|
10
|
+
# Return the search mapping document
|
11
|
+
#
|
12
|
+
# @param index [String] the index, accepted value is one of "agent", "material_sample", "object_store"
|
13
|
+
#
|
14
|
+
# @return [Hash] the mapping document as a hash with symbolized keys
|
11
15
|
def self.execute(index:)
|
12
16
|
params = {
|
13
17
|
indexName: index_name(index: index)
|
data/lib/dina/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dina
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David P. Shorthouse
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json_api_client
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 3.0.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rest-client
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 2.1.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.1.0
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rake
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|