Установка ElasticSearch и базовый операционный API

Elasticsearch

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 для добавления документов

использовать_docAPI для добавления документов человеку:

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 по сравнению с предыдущим.

создать метод для добавления документов

использовать_createAPI для добавления документов человеку:

PUT /person/_create/2
{
  "name":"yangtao",
  "blog":"ytao's blog",
  "remark":"coder"
}

Здесь необходимо указать id, иначе добавить не получится, а существующий id в документе добавить нельзя.

Получить и запросить документы

Получить документ по id

Используйте GET для получения документа:

GET /person/_doc/1

В возвращаемых данных:

запрос по полю

использовать_searchAPI для запросов, и я пока не буду давать здесь подробных объяснений. Запросите документ с именем ytao и передайтеfrom=0&size=2Пейджинговый запрос.

# q 为查询参数,查询的字段和值用 : 进行分割
GET /person/_search?q=name:ytao&from=0&size=2

Возвращаемый результат:

обновить документацию

Обновите документацию, используя_updateAPI для обновления.Обновления должны быть включены вdocсередина. Обновлением исходных данных может быть только добавление или изменение полей, что также и использует_docРазница между добавлением данных не в обновлении путем удаления старых документов.

POST /person/_update/1
{
  "doc":{
    "blog":"ytao's blog"
  }
}

удалить документ

Документы удаляются с помощью запроса DELETE, затем с указанием id:

DELETE /person/_doc/1

Документация по массовым операциям

Пакетная обработка может обрабатывать несколько задач в одном запросе, используя_bulkAPI выполняется. Ниже приведен пример добавления документа в индекс путем добавления индекса и последующего обновления поля блога в документе.

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"}}

В возвращенном результате информация о результатах возвращается в соответствии с каждой операцией. Когда есть ошибка запроса, она не повлияет на другие операции запроса.

Получите документы оптом

Чтобы получить документы пакетами, используйте_mgetAPI для отправки запросов, указав сразу несколько идентификаторов документов. Например, чтобы получить документы с id 1,2 в индексе человека:

POST _mget
{
  "docs":[
    {
      "_index": "person",
      "_id": 1
    },
    {
      "_index": "person",
      "_id": 2
    } 
  ]
}

Возвращаемый результат:

Пакетный запрос документов

Чтобы запрашивать документы в пакетах, используйте_msearchAPI для объединения нескольких запросов в один запрос. Ниже приведены различные условия для запроса в указанном индексе соответственно.

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], больше оригинальных хороших статей

我的公众号