Документы, индексы и REST API для Elasticsearch 7.x [базовый учебник]

Java

Несколько дней назад я написал статью «Самая подробная установка и настройка Elasticsearch 7.x», а сегодня продолжаю последнюю версию основного содержания записи. В этой статье представлен краткий обзор документации Elasticsearch 7.x, индексации и REST API.

  • что такое документ
  • Уникальный идентификатор документа
  • метаданные документа
  • Что такое индекс?
  • REST API

1. Индексный документ (Документ)

1.1 Что такое документ на местном языке

С точки зрения варианта использования Elasticsearch ориентирован на документы, а документ — это наименьшая единица всех поисковых данных.

  • Случай 1. У каждой компании есть платформа для бизнес-журналов, например бизнес-журнал транзакций.
    Документ: запись журнала в каждом файле журнала является документом.
  • Случай 2: сайты онлайн-видео, которые могут искать и воспроизводить фильмы
    Документация: конкретная информация каждого фильма является документация
  • Случай 3: Вы можете искать и загружать файлы с веб-сайта облачного хранилища, похожего на Baidu Cloud.
    Документ: Конкретная информация о содержимом каждого файла является документом.

Есть много случаев и т. д., тогда документ представляет собой запись длительного хранения, аналогичную базе данных. Документ (Document) является основной единицей индексной информации.

Документы сериализуются в формате JSON и физически хранятся в индексе. JSON — это распространенный формат обмена данными в Интернете:

  • Имя поля документа: формат JSON состоит из пар имя/значение, а соответствующее имя является именем поля документа.
  • Тип поля документа: Каждое поле имеет соответствующий тип поля: строка, целое число, длинное и т. д., и поддерживает данные и вложенность.

1.2 Уникальный идентификатор документа

file

Каждый документ будет иметь уникальный идентификатор, имя поля которого_id:

  • Задайте указанный ID самостоятельно или автоматически сгенерируйте его через Elasticsearch
  • Его значение не будет проиндексировано
  • Обратите вниманиеЗначение поля id можно использовать в определенных запросах term, terms, match, querystring, simplequeryстрока и т. д., но не в агрегатах, сценариях или сортировке. если необходимополе id для сортировки или суммирования, рекомендуется создать новое поле документа для копированиясодержимое поля id
PUT my_index/_doc/1
{
  "text": "Document with ID 1"
}

PUT my_index/_doc/2&refresh=true
{
  "text": "Document with ID 2"
}

GET my_index/_search
{
  "query": {
    "terms": {
      "_id": [ "1", "2" ] 
    }
  }
}

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

file

Метаданные — это связанная информация, используемая для маркировки документов, поэтому метаданные проиндексированных документов выглядят следующим образом:

  • _index Имя индекса, к которому принадлежит документ
  • _type Имя типа, к которому принадлежит документ
  • _id Уникальный идентификатор документа
  • _score Оценка релевантности документа
  • _source данные JSON документа
  • _version Информация о версии документа

Среди них документ _type относится к имени типа, нужно обратить внимание на разницу между разными версиями:

  • До версии 7.0 индекс мог иметь несколько типов.
  • Начиная с 7.0, он устарел. Индекс может создавать только один тип, значение _doc

2. Указатель (Индекс)

2.1 Индексы имеют разное значение

В качестве существительного индекс означает, что в кластере Elasticsearch может быть создано множество различных индексов. Вот что резюмирует этот раздел.

Как глагол, индексирование означает сохранение документа в Elasticsearch. Это означает создание инвертированного индекса в Elasticsearch

2.2 Что такое индекс

Индекс представляет собой набор похожих типов документов. Подобно контейнеру Spring Bean, загруженному множеством bean-компонентов, индекс ES является контейнером документа, который представляет собой набор документов определенного типа.

ранее импортированная кибанаsampleИндекс data_flights, получая следующую URL, вы можете получить некоторую информацию о индексе:

GET http://localhost:9200/kibana_sample_data_flights

Результат выглядит следующим образом:

{
    "kibana_sample_data_flights": {
        "aliases": {},
        "mappings": {
            "properties": {
                "AvgTicketPrice": {
                    "type": "float"
                },
                "Cancelled": {
                    "type": "boolean"
                },
                "Carrier": {
                    "type": "keyword"
                },
                "DestLocation": {
                    "type": "geo_point"
                },
                "FlightDelay": {
                    "type": "boolean"
                },
                "FlightDelayMin": {
                    "type": "integer"
                },
                "timestamp": {
                    "type": "date"
                }
            }
        },
        "settings": {
            "index": {
                "number_of_shards": "1",
                "auto_expand_replicas": "0-1",
                "blocks": {
                    "read_only_allow_delete": "true"
                },
                "provided_name": "kibana_sample_data_flights",
                "creation_date": "1566271868125",
                "number_of_replicas": "0",
                "uuid": "SfR20UNiSLKJWIpR1bcrzQ",
                "version": {
                    "created": "7020199"
                }
            }
        }
    }
}

По возвращенному результату мы знаем:

  • сопоставления: определить типы полей документа
  • настройки: определить различные распределения данных
  • псевдонимы: определите псевдонимы для индекса, к которым можно получить доступ через псевдоним

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

Сводка фактического опыта: псевдоним AliaseS, такой как Myиндекс перенесен на мойindex_new , после переноса данных вам нужно только сохранить согласованную конфигурацию псевдонима. Тогда бизнес-стороне, получающей доступ к индексу через псевдоним, не нужно его изменять, и его можно перенести напрямую.

2.3 Аналогия с MySQL

Базовое понимание двух важных концепций Elasticsearch, вы можете сравнить ключевые моменты ES с реляционными базами данных следующим образом:

file

3. REST API удобен для вызова ES на разных языках

file

Как показано на рисунке, для удобства Elasticsearch предоставляет REST API.

# 查看索引相关信息
GET kibana_sample_data_ecommerce

# 查看索引的文档总数
GET kibana_sample_data_ecommerce/_count

# 查看前10条文档,了解文档格式
POST kibana_sample_data_ecommerce/_search
{
}

# _cat indices API
# 查看indices
GET /_cat/indices/kibana*?v&s=index

# 查看状态为绿的索引
GET /_cat/indices?v&health=green

# 按照文档个数排序
GET /_cat/indices?v&s=docs.count:desc

# 查看具体的字段
GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs.count,mt

# How much memory is used per index?
GET /_cat/indices?v&h=i,tm&s=tm:desc

Доступ к конкретному API можно получить с помощью таких инструментов, как POSTMan, или путем установки kibana и соответствующих инструментов разработки.

(Конец), больше можно увидеть в серии руководств по ES 7.x на сайте Socket.com.

материал:

  • Самая подробная установка и настройка Elasticsearch 7.x
    https://www.bysocket.com/elasticsearch/2417.html
  • Geek Time Основные технологии и практика Elasticsearch
  • CAT Index API https://www.elastic.co/guide/en/elasticsearch/reference/7.1/cat-indices.html
  • Почему несколько Tyeps под одним индексом больше не поддерживаются https://www.elastic.co/cn/blog/moving-from-types-to-typeless-apis-in-elasticsearch-7-0

Эта статья опубликована в блогеOpenWriteвыпуск!