Что такое индекс в Elasticsearch
Что такое индекс в Elasticsearch? Имеет ли одно приложение несколько индексов или только одно?
Скажем, вы создали систему для какого-нибудь производителя автомобилей. Это касается людей, автомобилей, запасных частей и т.д. У вас есть один индекс, названный производителем, или у вас есть один индекс для людей, один для автомобилей и третий для запасных частей? Может кто-нибудь объяснить?
Ответы
Ответ 1
Хороший вопрос, и ответ гораздо более тонкий, чем можно было бы ожидать. Вы можете использовать индексы для разных целей.
Индексы для отношений
Самый простой и знакомый макет клонирует то, что вы ожидаете от реляционной базы данных. Вы можете (очень грубо) подумать об индексе, таком как база данных.
- MySQL = > Базы данных = > Таблицы = > Столбцы/строки
- ElasticSearch = > Индексы = > Типы = > Документы с свойствами
Кластер ElasticSearch может содержать несколько Indices
(базы данных), которые, в свою очередь, содержат несколько Types
(таблиц). Эти типы содержат несколько Documents
(строк), и каждый документ имеет Properties
(столбцы).
Таким образом, в сценарии развития вашего автомобиля у вас может быть индекс SubaruFactory
. Внутри этого индекса у вас есть три разных типа:
Каждый тип содержит документы, соответствующие этому типу (например, документ 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 рекомендует хранить индекс для типа документа.
Обратитесь: Удаление типов сопоставления