Основные понятия Elasticsearch: документы и индексы

Elasticsearch

Оригинальный автор, публичный аккаунт [программист чтение], прошу обратить внимание на паблик аккаунт, просьба указывать источник перепечатываемой статьи.

В предыдущей статье былElastic Stackсостав, иметь общее представление о функциях каждого компонента и знать, как установить каждый компонент, и наиболее важным компонентом являетсяelasticsearch(es), поэтому в этой статье мы поговорим оesнекоторые из основных понятий.

esОсновными понятиями в основном являются:index(показатель),Document(документация),Clusters(кластер),Node(узел) и примеры, давайте сначала посмотрим на этоDocumentиIndex.

RESTful APIs

объяснениеDocumentиIndexПеред концепцией давайте сначала разберемсяRESTful APIs, потому что следующее объясняетDocumentиIndexбудет использоваться, когда .

Когда мы запускаем сервер es, как мы его называем?

На самом деле это очень просто, es предоставляет на основеHTTPпротоколRESTful APIS, то есть мы можем отправить его на сервер es, отправивHTTPЗапросы на работу сервера es, такие как чтение и запись документов, запросы к API документов, поиск API, создание и удаление индексов.По умолчанию es использует порт 9200 для получения HTTP-запросов.

Так что вызывать es легко, мы даже можем использовать инструменты командной строкиcurlзвонитьes, например, в следующем коде мы используемcurlВ направленииesОтправитьPUTЗапрос, передача данных в формате JSON в теле запроса на сервер es:

# 使用curl调用es,创建一个文档
curl http://localhost:9200/my_test/1 -H "Content-Type:application/json" \
-X POST -d '{"uid":1,"username":"test"}'

На следующем рисунке показан процесс отправки запроса к es и ответа серверу es:

Однако в целом мы можем управлять es через Kibana, а es в KibanaDev Toolsпозволяет использовать различныеesизRESTful API, ниже то, что мы имеем вKibanaсерединаDev ToolsИспользуемая структура оператора фактически такая же, как и использованная выше.curlОпять же, мы будем использовать этот формат в демонстрации ниже.

PUT /my_test/_doc/1
{
    "uid":1,
    "username":"test"
}

На самом деле, чтобы облегчить вызов различных языков программирования,esПредоставляет библиотеки классов для нескольких языков программирования (Java,PHP,Ruby,Go,Python,JavaScript,NETд.), но эти языки программирования основаны наesкоторый предоставилRESTful APIsупаковка.

Документ

esориентирован на документ, документesНаименьшая доступная для поиска единица в ,esДокумент состоит из одного или нескольких полей, подобных строке в реляционной базе данных, ноesДокументацияJSONсериализованы и сохранены, каждыйJSONОбъект состоит из одного или нескольких полей, и тип поля может быть логическим, числовым, строковым, двоичным, датой и другими типами данных.

esКаждый документ имеет уникальныйid,этоidможем указать сами илиesГенерируется автоматически.

метаданные документа

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

Ниже обычныйesДокументация:

{
  "_index" : "test_logs2",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "_seq_no" : 0,
  "_primary_term" : 1,
  "found" : true,
  "_source" : {
    "uid" : 1,
    "username" : "test"
  }
}

Из приведенного выше документа мы видим, что поля метаданных документа следующие:

  • _index: имя индекса, в котором находится документ
  • _source: необработанные данные json
  • _type: тип документа, только _doc после es7.0
  • _Version: версия документа, если документ изменен, это поле будет увеличиваться
  • _score: оценка релевантности
  • id: уникальный идентификатор документа

Давайте разберемсяesпройти черезRESTful Apiс документациейCURDи так далее:

Create

по эсRESTful API,использоватьHTTPизPUTметод, вы можете создать документ в индексе, вKibanaизDev Tools, мы можем создать документ, используя следующую инструкцию:

# 在my_test索引中创建一个文档
PUT /my_test/_create/1
{
    "uid":1,
    "username":"one"
}

Index

В es индексы имеют следующие три значения и функции:

  1. Глаголы, способ создания документов в es, это то, о чем мы сейчас говорим.
  2. Существительные, как es организует документы, будут рассмотрены ниже.
  3. Глаголы, сегментируют поля документа и сохраняют их, что будет рассмотрено позже
# 使用Index的方式
PUT /my_test/_doc/1
{
    "uid":1,
    "username":"test"
}

Метод Index аналогичен методу Create, который используется для создания документа es. Разница в том, что при использовании Index для создания документа, если указанный идентификатор документа уже существует, исходный документ будет удален, а будет создан новый документ, а поля документа будут удалены._versionдобавит 1

Update

Данные документа обновляются с использованием метода HTTP POST, и измененная информация поля также должна быть вdoc, следующее:

Способ использования обновления заключается в непосредственном обновлении данных, что отличается от использования индекса для создания документа.Если документ существует, он будет удален и создан заново.

# 更新
POST /my_test/_doc/1
{
    "doc":{
        "username":"this is a document"
    }
}

Delete

Используя метод DELETE в HTTP, вы можете удалить документ es. Пример выглядит следующим образом:

# 删除文档
DELETE /my_test/_doc/1

Read

Чтение документа es очень просто, просто используйте метод GET HTTP, как показано ниже:

# 读取
GET /my_test/_doc/1

Bulk Api

Выше было сказано о документеIndex,Create,Update,Deleteи т. д., но одновременно может работать только один документ одного индекса, и мы знаем, что каждый раз, когда сервер запрашивается для выполнения операции, накладные расходы на время прохождения сетевого запроса туда и обратно составляют большое потребление, если только один операция выполняется для каждого запроса, то это слишком расточительно.

такesдокументацииbulk apiПоддерживает одновременную обработку документов в разных индексах в одном запросеIndex,Create,Update,DeleteОжидание операций, также известное как пакетная обработка, во время обработки, даже если одна из операций завершается сбоем, это не повлияет на другие операции, а именно:

POST _bulk
{"create":{"_index":"my_test2","_id":4}}  
{"uid":2,"username":"333333333333333333"}
{"index":{"_index":"my_test2","_id":10}}
{"uid":10,"username":"tttt"}
{"delete":{"_index":"my_test2","_id":1}}
{"update":{"_index":"my_test2","_id":2}}
{"doc":{"uid":2,"username":"hhhhhhhhhhhhhhhhh"}}

выше простоbulk apiПростой пример, если вы хотите ознакомиться с синтаксисом, вам следует взглянутьesофициальная документация.

Индекс (Индекс)

esуказатель, даesСпособ организации документов состоит в том, чтобы иметь набор структурированных документов, которые вы можете поместитьesИндекс аналогичен таблице данных в реляционной базе данных.

Давайте посмотрим на различные операции с индексом.RESTful APIs,следующее:

Create

использоватьHTTPизPUTметод создания индекса вKibnaизDev Tools, индекс можно создать с помощью следующего оператора:

PUT /my_test

Также укажите сопоставление и настройку при создании индекса следующим образом:

PUT /my_test
{
    "settings" : {
        "index" : {
            "number_of_shards" : 3, 
            "number_of_replicas" : 2 
        }
    }
}

Exists

можно использоватьHTTPизHEADМетод определяет, существует ли индекс, следующим образом:

# 判断索引是否存在
HEAD /my_test

Если индекс существует, тоhttpвозврат кода состояния200, если он не существует, вернуть404.

Get

использоватьHTTPизGETметод получения индексаsettingиmappingи другую информацию, а именно:

GET /index

Возвращает следующие результаты:

{
  "my_test" : {
    "aliases" : { },
    "mappings" : { },
    "settings" : {
      "index" : {
        "creation_date" : "1564757617415",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "z6zGhu_ERA-R1c0m2fQrvg",
        "version" : {
          "created" : "7020099"
        },
        "provided_name" : "my_test"
      }
    }
  }
}

Delete

API индекса, удаленный в es, позволяет нам удалять существующие индексы в следующих ситуациях:

Удаление одного или нескольких индексов с использованием имен индексов
# 删除my_test
DELETE /my_test

# 删除多个索引,用逗号分隔
DELETE /my_test,my_test1,my_test2
Используйте подстановочный знак * для удаления нескольких индексов (используйте с осторожностью)
# 删除以my_test为前缀的索引
DELETE /my_test*
Используйте _all для удаления всех индексов на сервере es.
# 删除全部索引
DELETE /_all

Обратите внимание, что эта операция очень опасна и не рекомендуется, если вы хотите отключить эту операцию, вы можетеesизconfig/elasticsearch.ymlЛейтенант Общие параметрыaction.destructive_requires_nameУстановить какtrue,как:

action.destructive_requires_name:true

В этом случае вышеуказанные операции не могут быть выполнены.

резюме

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


Ваше внимание — самое большое поощрение на моем писательском пути!