Настройка ElasticSearch
https://golos.id/@lex/vnutrennii-poisk-na-golose-naidyotsya-vsyo

Установка ElasticSearch (ссылка)

1
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Copied!
1
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
Copied!
1
sudo apt-get update && sudo apt-get install elasticsearch
Copied!

Добавляем настройки в конфиг

Добавить в конфиг /etc/elasticsearch/elasticsearch.yml
1
network.host: 0.0.0.0
2
xpack.security.enabled: true
3
discovery.type: single-node
4
http.cors.enabled : true
5
http.cors.allow-origin: "*"
6
http.cors.allow-headers: Content-Type,Authorization
Copied!
Перезапуск для применения настроек
1
sudo service elasticsearch restart
Copied!

Устанавливаем пароли на доступы

1
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
Copied!
В конфиг ноды позднее нужно добавить пароль заданный к роли elastic (для примера 123456). Перезапуск для применения настроек
1
sudo service elasticsearch restart
Copied!

Добавляем read-only роль golosclient

1
curl -u elastic:123456 -XPOST 'localhost:9200/_xpack/security/role/golosclient_readonly_role' \
2
-H 'Content-Type: application/json' \
3
-d'{"indices":[{"names":"*","privileges":["read"]}]}'
Copied!

Добавляем read-only пользователя golosclient

1
curl -u elastic:123456 -XPOST localhost:9200/_xpack/security/user/golosclient \
2
-H 'Content-Type: application/json' \
3
-d'{"roles":["golosclient_readonly_role"],"password":"golosclient"}'
Copied!
Перезапуск для применения настроек
1
sudo service elasticsearch restart
Copied!

Добавляем параметры к ноде

К списку плагинов дописываем elastic_search
В конфиг ноды добавляем параметры:
1
elastic-search-uri = http://172.17.0.1:9200
2
elastic-search-login = elastic
3
elastic-search-password = 123456
Copied!
где elastic-search-uri прописан с учётом того что нода будет запускаться через Docker, а пароль к пользователю elastic заданный на этом шаге.
Перезапускаем ноду с её реплеем, индекс ElasticSearch должен наполняться.

Структура и примеры

Количество элементов в индексе
1
curl -u golosclient:golosclient -XGET https://betasearch.golos.today/blog/post/_count?pretty
Copied!
Пример запроса поста из базы
1
curl -u golosclient:golosclient -XGET https://betasearch.golos.today/blog/post/lex.vnutrennii-poisk-na-golose-naidyotsya-vsyo?pretty
Copied!
Пример запроса статистики ElasticSearch
1
curl -u elastic:123456 -XGET "http://localhost:9200/_stats?pretty"
Copied!
Mapping всех типов индекса blog:
1
curl -u elastic:123456 -XGET "http://localhost:9200/blog/_mapping?pretty"
Copied!
Ответ
1
{
2
"blog" : {
3
"mappings" : {
4
"properties" : {
5
"author" : {
6
"type" : "text",
7
"fields" : {
8
"keyword" : {
9
"type" : "keyword",
10
"ignore_above" : 256
11
}
12
}
13
},
14
"body" : {
15
"type" : "text",
16
"fields" : {
17
"keyword" : {
18
"type" : "keyword",
19
"ignore_above" : 256
20
}
21
}
22
},
23
"category" : {
24
"type" : "text",
25
"fields" : {
26
"keyword" : {
27
"type" : "keyword",
28
"ignore_above" : 256
29
}
30
}
31
},
32
"created" : {
33
"type" : "date"
34
},
35
"depth" : {
36
"type" : "long"
37
},
38
"donates" : {
39
"type" : "text",
40
"fields" : {
41
"keyword" : {
42
"type" : "keyword",
43
"ignore_above" : 256
44
}
45
}
46
},
47
"donates_uia" : {
48
"type" : "long"
49
},
50
"id" : {
51
"type" : "long"
52
},
53
"json_metadata" : {
54
"type" : "text",
55
"fields" : {
56
"keyword" : {
57
"type" : "keyword",
58
"ignore_above" : 256
59
}
60
}
61
},
62
"net_rshares" : {
63
"type" : "long"
64
},
65
"parent_author" : {
66
"type" : "text",
67
"fields" : {
68
"keyword" : {
69
"type" : "keyword",
70
"ignore_above" : 256
71
}
72
}
73
},
74
"parent_permlink" : {
75
"type" : "text",
76
"fields" : {
77
"keyword" : {
78
"type" : "keyword",
79
"ignore_above" : 256
80
}
81
}
82
},
83
"permlink" : {
84
"type" : "text",
85
"fields" : {
86
"keyword" : {
87
"type" : "keyword",
88
"ignore_above" : 256
89
}
90
}
91
},
92
"root_author" : {
93
"type" : "text",
94
"fields" : {
95
"keyword" : {
96
"type" : "keyword",
97
"ignore_above" : 256
98
}
99
}
100
},
101
"root_permlink" : {
102
"type" : "text",
103
"fields" : {
104
"keyword" : {
105
"type" : "keyword",
106
"ignore_above" : 256
107
}
108
}
109
},
110
"root_title" : {
111
"type" : "text",
112
"fields" : {
113
"keyword" : {
114
"type" : "keyword",
115
"ignore_above" : 256
116
}
117
}
118
},
119
"tags" : {
120
"type" : "text",
121
"fields" : {
122
"keyword" : {
123
"type" : "keyword",
124
"ignore_above" : 256
125
}
126
}
127
},
128
"title" : {
129
"type" : "text",
130
"fields" : {
131
"keyword" : {
132
"type" : "keyword",
133
"ignore_above" : 256
134
}
135
}
136
},
137
"total_votes" : {
138
"type" : "long"
139
}
140
}
141
}
142
}
143
}
Copied!
Last modified 7mo ago