6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
# File 'app/lib/has_helpers/search/elasticsearch_shared.rb', line 6
def searchkick_results(resource, query, options)
organization_id = options[:with]&.symbolize_keys&.dig(:organization_id)
klasses = Array(resource).map { |r| class_from_resource(r.to_s) }
if klasses.size === 1
klass = klasses.first
if klass != klass.base_class && klass.search_index.fields.include?(:type)
options[:with][:type] = klass.name
end
end
show_inactive = options[:with] && options[:with][:show_inactive]
options[:with].delete(:show_inactive) if show_inactive
searchkick_results = HasHelpers::Index.search(query,
indexes: klasses.map(&:search_index),
where: options[:with].symbolize_keys, load: false,
per_page: 15,
page: options[:page],
show_inactive: show_inactive
)
results = {}
searchkick_results.each do |result|
key = result["_type"].classify.remove("Index")
results[key] ||= []
results[key] << result["_id"]
end
results = ::HasHelpers::Index.filter_hidden_constants(results, organization_id) || results if organization_id.present?
results.each { |key, array| results[key] = owner_relation(key).where(id: array).index_by { |r| r.id.to_s } }
results = searchkick_results.
map do |result|
results[result["_type"].classify.remove("Index")][result["_id"]]
end.
compact
results = { results: results }
self.class::PAGINATION_ATTRS.each do |attr|
results[attr] = searchkick_results.send(attr)
end
results
end
|