Подтвердить что ты не робот

Что такое индекс в Elasticsearch

Что такое индекс в Elasticsearch? Имеет ли одно приложение несколько индексов или только одно? Скажем, вы создали систему для какого-нибудь производителя автомобилей. Это касается людей, автомобилей, запасных частей и т.д. У вас есть один индекс, названный производителем, или у вас есть один индекс для людей, один для автомобилей и третий для запасных частей? Может кто-нибудь объяснить?

4b9b3361

Ответ 1

Хороший вопрос, и ответ гораздо более тонкий, чем можно было бы ожидать. Вы можете использовать индексы для разных целей.

Индексы для отношений

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

  • MySQL = > Базы данных = > Таблицы = > Столбцы/строки
  • ElasticSearch = > Индексы = > Типы = > Документы с свойствами

Кластер ElasticSearch может содержать несколько Indices (базы данных), которые, в свою очередь, содержат несколько Types (таблиц). Эти типы содержат несколько Documents (строк), и каждый документ имеет Properties (столбцы).

Таким образом, в сценарии развития вашего автомобиля у вас может быть индекс SubaruFactory. Внутри этого индекса у вас есть три разных типа:

  • People
  • Cars
  • Spare_Parts

Каждый тип содержит документы, соответствующие этому типу (например, документ Subaru Imprezza живет внутри типа Cars. Этот документ содержит все сведения об этом конкретном автомобиле).

Поиск и запрос принимают формат: http://localhost: 9200/[index]/[type]/[operation]

Итак, чтобы получить документ Subaru, я могу сделать это:

  $ curl -XGET localhost:9200/SubaruFactory/Cars/SubaruImprezza

.

Индексы для регистрации

Теперь реальность такова, что индексы/типы намного более гибкие, чем абстракции Database/Table, к которым мы привыкли в RDBM. Их можно считать удобными механизмами организации данных с дополнительными преимуществами в зависимости от того, как вы настроите свои данные.

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

  • журналы-2013-02-22
  • журналы-2013-02-21
  • журналы-2013-02-20

ElasticSearch позволяет запрашивать несколько индексов одновременно, поэтому это не проблема:

  $ curl -XGET localhost:9200/logs-2013-02-22,logs-2013-02-21/Errors/_search=q:"Error Message"

Выполняет поиск журналов за последние два дня одновременно. Этот формат имеет преимущества из-за характера журналов - большинство журналов никогда не просматриваются, и они организованы в линейный поток времени. Создание индекса для журнала более логично и обеспечивает лучшую производительность для поиска.

.

Индексы для пользователей

Другим принципиально другим подходом является создание индекса для каждого пользователя. Представьте, что у вас есть сайт социальной сети, и у каждого пользователя есть множество случайных данных. Вы можете создать единый индекс для каждого пользователя. Ваша структура может выглядеть так:

  • Индекс Zach
    • Хобби Тип
    • Тип друзей
    • Тип изображений
  • Индекс Фреда
    • Хобби Тип
    • Тип друзей
    • Тип изображений

Обратите внимание на то, как эта настройка может быть легко выполнена традиционным способом RDBM (например, "Пользователи", с хобби/друзьями/картинками как типы). Затем все пользователи будут выброшены в один гигантский индекс.

Вместо этого иногда имеет смысл разделить данные для организации данных и повышения производительности. В этом случае мы предполагаем, что у каждого пользователя есть много данных, и мы хотим, чтобы они были разделены. У ElasticSearch нет проблем, позволяя нам создать индекс для каждого пользователя.

Ответ 2

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

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

Вы должны потратить некоторое время на знакомство с концепциями lucene и elasticsearch.

Взгляните на вступительное видео и на это с помощью шаблоны проектирования данных

Ответ 3

Выше один слишком подробный, очень короткий, его можно определить как

Индекс:. Это набор документов и документов разных типов. Индекс также использует концепцию осколков, чтобы улучшить производительность. Например, набор документов содержит данные приложения для социальных сетей. Ответ от tutorialpoints.com

Поскольку индекс - это сбор документов разных типов в зависимости от вопроса, зависит от того, как вы хотите классифицировать.

У вас есть один индекс с именем производителя? Да, мы сохраним один документ с производителем.

Есть ли у вас один индекс для людей, один для автомобилей и третий для запасных частей? Может ли кто-нибудь объяснить? Подумайте о том, как автомобиль, предоставленный одним и тем же изготовителем, многим людям управляет автомобилем по дороге. В зависимости от количества использования может быть много индексов.

Если мы будем думать глубоко, мы найдем, кроме первого вопроса, все будут недействительными. Документы с эластичным поиском сильно отличаются от документов SQL или документов csv или таблиц, из одних индексов и с помощью хорошего мощного языка запросов вы можете создавать типы данных с разбивкой по типам миллионов в стиле CSV.

Благодаря своей невероятно быстрой и индексируемой возможности мы создаем один индекс только для одного клиента, из которого мы создаем множество типов документов в соответствии с нашей потребностью. Например:

Все старые люди, использующие ту же модель. Или один старый человек, использующий всю модель.

Пермутация является inifinite.

Ответ 4

Ответ на

@Zach действителен для elasticsearch 5.X и ниже. Поскольку elasticsearch 6.X Type устарел и будет полностью удален в 7.X. Цитирование документов elasticsearch:

Вначале мы говорили о том, что "индекс" похож на "базу данных" в базе данных SQL, а "тип" эквивалентен "таблице". Это была плохая аналогия, которая привела к неправильным предположениям.

Кроме того, два столбца с одинаковым именем в SQL из двух разных таблиц могут быть независимыми друг от друга. Но в индексе elasticsearch это невозможно, так как они поддерживаются одним и тем же полем Lucene. Таким образом, "индекс" в elasticsearch не совсем такой же, как "база данных" в SQL. Если в индексе есть какие-либо поля, они будут иметь конфликты типов полей. Чтобы избежать этого, документация elasticsearch рекомендует хранить индекс для типа документа.

Обратитесь: Удаление типов сопоставления