forked from performant-software/core-data-cloud
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgeorgia_coast_topic_tree.rb
More file actions
71 lines (64 loc) · 2.28 KB
/
georgia_coast_topic_tree.rb
File metadata and controls
71 lines (64 loc) · 2.28 KB
1
2
3
4
5
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# frozen_string_literal: true
# Open the rails console and run
# load './georgia_coast_topic_tree.rb'
require 'elasticsearch'
require 'core_data_connector/taxonomy'
client = Elasticsearch::Client.new(
host: ENV['ELASTICSEARCH_HOST'],
api_key: ENV['ELASTICSEARCH_API_KEY'],
retry_on_failure: true,
transport_options: {
request: { timeout: 20 }
}
)
collection = 'georgia_coast_topic_tree'
topics = CoreDataConnector::Taxonomy.where(project_model_id: 13)
relations = CoreDataConnector::Relationship.where(project_model_relationship_id: 39)
parents = topics.reject { |r| relations.map(&:related_record).include? r }
tree = parents.map do |p|
{
slug: p.name.parameterize,
label: p.name,
sub_topics: relations.where(primary_record: p).map do |sub|
subs = relations.where(primary_record: sub.related_record)
if subs.empty?
{
slug: sub.related_record.name.parameterize,
label: sub.related_record.name,
parent_topics: [p.name.parameterize]
}
else
{
slug: sub.related_record.name.parameterize,
label: sub.related_record.name,
parent_topics: [p.name.parameterize],
sub_topics: subs.map do |r|
subs = relations.where(primary_record: r.related_record)
if subs.empty?
{
slug: r.related_record.name.parameterize,
label: r.related_record.name,
parent_topics: [p.name.parameterize, sub.related_record.name.parameterize]
}
else
{
slug: r.related_record.name.parameterize,
label: r.related_record.name,
parent_topics: [p.name.parameterize, sub.related_record.name.parameterize],
sub_topics: subs.map do |s|
{
slug: s.related_record.name.parameterize,
label: s.related_record.name,
parent_topics: [p.name.parameterize, sub.related_record.name.parameterize, r.related_record.name.parameterize]
}
end
}
end
end
}
end
end
}
end
requests = [{ index: { _index: collection, _id: 'JcV1tZYBScXy9kOSVsBL', data: { doc: tree } } }]
client.bulk(body: requests)