ElasticSearch — очень популярная поисковая система в настоящее время, она очень удобна для поиска больших объемов данных, а также может работать стабильно и быстро в сценариях с высокой степенью параллелизма. Это также промежуточное ПО, пользующееся большим спросом у разработчиков больших данных и поисковых сервисов. Несмотря на то, что ElasticSearch глубоко любим всеми, скорость его итерации высока, поэтому в соответствующем сообществе всегда есть слова, что его невозможно выучить Именно это постоянное совершенствование позволяет текущему сообществу быть активным. Когда я использую ElasticSearch, я перешел с версии 5.x на версию 6.x, а теперь на версию 7.x. Из обновления версии мы также увидели, что ElasticSearch использует основные технологические изменения, наиболее очевидными из которых являются поддержка новой версии JDK и поддержка технологии контейнеров.
Установить
Эта статья основана на последней версииElasticSearch-7.5.0
Для работы, если загрузка с официального сайта слишком медленная, вы можете отправить ее в [официальный аккаунт ytao]es
Получите ссылку для скачивания.
Среда установки и связанные пакеты этой статьи:
操作系统 CentOS 7.5 64位
ElasticSearch 7.5.0
Kinbana 7.5.0
среда JDK
ElasticSearch поставляется со средой JDK в версии 7.x, поэтому теперь нет необходимости устанавливать JDK. По умолчанию сначала определяется, установлен ли JDK на текущем сервере. Если он установлен, используйте JDK, установленный сервером. В противном случае будет использоваться встроенный JDK. Конечно, это также можно установить вручную.
Создать стартовую учетную запись
Поскольку ElasticSearch по умолчанию не поддерживает разрешение на запуск учетной записи root, первым шагом является создание стартовой учетной записи. Создайте группу выполнения ElasticSearch:
groupadd es
Создайте пользователя в группе es:
useradd elastic -g es
Установка нового пароля пользователя:
passwd elastic
Авторизуйте извлеченный пакет ElasticSearch:
chown -R elastic:es elasticsearch-7.5.0
Изменить файл конфигурации
Войти/elasticsearch-7.5.0
каталог, вconfig
Есть каталогelasticsearch.yml
файле, измените текущую конфигурацию, требуемую в нем.
- cluster.name — это имя кластера-владельца.
- node.name имя текущего узла
- network.host Адрес, привязанный к текущему узлу, связанный с
0.0.0.0
полный доступ - http.port Номер порта для внешних служб
- каталог хранения данных path.data, обычно я не использую каталог по умолчанию, а авторизую пользовательский каталог
- Каталог журнала path.log, аналогичный path.data
Еще одна важная конфигурация, в текущем каталогеjvm.options
настройки файла.
Здесь задается размер динамической памяти, рекомендуется установить 50% от объема памяти машины.
-Xms4g
-Xmx4g
Другие конфигурации пока не используются и пока не будут анализироваться, а будут объяснены в следующих статьях.
запускать
Значение, заданное файлом конфигурации установки, активируется по умолчанию и выполняется напрямую../bin/elasticsearch
, как и ожидалось, запуск ненормальный.
На изображении выше выдаются два исключения.
- Во-первых, виртуальной памяти слишком мало, по крайней мере, 262144.
- Вторая текущая конфигурация по умолчанию не подходит, в конфигурации [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] есть как минимум одна конфигурация.
Теперь увеличьте виртуальную память сервера:
# 编辑 sysctl.conf 文件
vim /etc/sysctl.conf
# 在 sysctl.conf 中添加
vm.max_map_count=262144
# 查看刚设置的是否生效
sysctl -p
Установите параметр конфигурации cluster.initial_master_nodes:
cluster.initial_master_nodes: ["node-1"]
После завершения перезагрузки исключение не генерируется, доступip:9200
, возвращает информацию о данных, включая имя кластера, имя узла, информацию о версии и т. д.:
Базовый операционный API
Установите Kibana перед выполнением операции API, в Kibana выполняется следующая команда. После извлечения Кибаны,kibana.yml
Установите адрес ElasticSearch вelasticsearch.hosts: ["http://ip:9200"]
. пройти черезbin/kibana
начать. Установка относительно проста и не будет здесь подробно описываться.
индексная операция
создать индекс
Пример создания индекса человека, number_of_shards — это количество осколков, а number_of_replicas — это количество реплик индекса Здесь мы в основном демонстрируем, что некоторые важные параметры могут быть установлены при создании индекса, и они являются необязательными.
PUT /person
{
"mappings" : {
"properties": {
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256 // 长度超过ignore_above设定的值,不会被索引或存储
}
}
}
}
},
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}
Выполните результат команды:
индекс запроса
Используйте запрос GET для запроса информации об индексе:
GET /person
вернуть результат
падение индекса
Используйте метод запроса DELETE:
# 删除 person 索引
DELETE /person
# 删除全部索引
DELETE /_all
# 通配符删除
DELETE /person*
операция отображения
Запросите сопоставление индекса человека:
GET /person/_mapping
Добавьте поле примечания в индекс человека, имя в предыдущем сопоставлении не будет удалено.
POST /person/_mapping
{
"properties" : {
"remark2" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
манипулирование документами
Добавить документы
Существует два способа добавления документов.Первый - использовать тип указанного индекса для добавления документов.Начиная с 7.x, тип можно указать только как значение _doc, а несколько типов не поддерживаются (ps: ранее используемый тип в основном использовался для преобразования логических разделов индекса). Второй — использовать _create для создания данных.
метод index для добавления документов
использовать_doc
API для добавления документов человеку:
PUT /person/_doc/1
{
"name":"ytao",
"blog":"公众号 ytao",
"remark":"https://ytao.top"
}
Добавьте данные, возвращенные после добавления документа:
Если во время выполнения вышеуказанной команды индекс или сопоставление не существует, они будут созданы автоматически. Идентификатор здесь также может быть сгенерирован автоматически, но запрос не может использовать метод PUT, он должен быть изменен на метод POST.
POST /person/_doc/
{
"name":"ytao",
"blog":"公众号 ytao",
"remark":"https://ytao.top"
}
Если мы вставим документ с идентификатором 1 и выполним его повторно, сначала будет удален старый документ, а затем будет сделана ссылка на новый документ, а соответствующий_version
Значение номера версии будет +1 по сравнению с предыдущим.
создать метод для добавления документов
использовать_create
API для добавления документов человеку:
PUT /person/_create/2
{
"name":"yangtao",
"blog":"ytao's blog",
"remark":"coder"
}
Здесь необходимо указать id, иначе добавить не получится, а существующий id в документе добавить нельзя.
Получить и запросить документы
Получить документ по id
Используйте GET для получения документа:
GET /person/_doc/1
В возвращаемых данных:
запрос по полю
использовать_search
API для запросов, и я пока не буду давать здесь подробных объяснений.
Запросите документ с именем ytao и передайтеfrom=0&size=2
Пейджинговый запрос.
# q 为查询参数,查询的字段和值用 : 进行分割
GET /person/_search?q=name:ytao&from=0&size=2
Возвращаемый результат:
обновить документацию
Обновите документацию, используя_update
API для обновления.Обновления должны быть включены вdoc
середина. Обновлением исходных данных может быть только добавление или изменение полей, что также и использует_doc
Разница между добавлением данных не в обновлении путем удаления старых документов.
POST /person/_update/1
{
"doc":{
"blog":"ytao's blog"
}
}
удалить документ
Документы удаляются с помощью запроса DELETE, затем с указанием id:
DELETE /person/_doc/1
Документация по массовым операциям
Пакетная обработка может обрабатывать несколько задач в одном запросе, используя_bulk
API выполняется.
Ниже приведен пример добавления документа в индекс путем добавления индекса и последующего обновления поля блога в документе.
POST _bulk
{"index":{"_index":"person", "_id":1}}
{"name":"ytao","blog":"公众号 ytao","remark":"https://ytao.top"}
{"update":{"_index":"person", "_id":1}}
{"doc":{"blog":"ytao's blog"}}
В возвращенном результате информация о результатах возвращается в соответствии с каждой операцией. Когда есть ошибка запроса, она не повлияет на другие операции запроса.
Получите документы оптом
Чтобы получить документы пакетами, используйте_mget
API для отправки запросов, указав сразу несколько идентификаторов документов.
Например, чтобы получить документы с id 1,2 в индексе человека:
POST _mget
{
"docs":[
{
"_index": "person",
"_id": 1
},
{
"_index": "person",
"_id": 2
}
]
}
Возвращаемый результат:
Пакетный запрос документов
Чтобы запрашивать документы в пакетах, используйте_msearch
API для объединения нескольких запросов в один запрос.
Ниже приведены различные условия для запроса в указанном индексе соответственно.
GET /person/_msearch
{"index":"person"}
{"query":{"match":{"blog":"ytao's blog"}}}
{"index":"person"}
{"query":{"match":{"remark":"coder"}}}
Возвращаемый результат:
Суммировать
В этой статье представлены самые основные и часто используемые API операций ElasticSearch. Если вы хотите изучить ElasticSearch, рекомендуется начать с операций API. Не просто берите код и выполняйте его напрямую. Хотя различные языки предоставляют соответствующие наборы инструментов, эти пакеты также основаны на API. Другие API будут проанализированы в будущих статьях.
Для получения дополнительной информации, связанной с API, рекомендуется проверить официальный сайт, Вот более подробное введение:woohoo.elastic.co/expensive/en/bad…
личный блог: ytao.top
Обратите внимание на паблик [ytao], больше оригинальных хороших статей