Elasticsearch - Моделирование информации каталога видео в одном индексе против нескольких индексов - PullRequest
0 голосов
/ 27 июня 2018

Мне нужно смоделировать видео каталог, состоящий из фильмов, телевизионных шоу, эпизодов, телевизионных каналов и информации о живых программах, вasticsearch. Некоторые из этих объектов взаимосвязаны, некоторые нет. Атрибуты этих сущностей весьма различны, даже если есть некоторые общие.

Теперь, поскольку мне, возможно, потребуется выполнить перекрестную сущность запроса, представьте себе сценарий, когда клиент ищет что-то, что может быть фильмом, телеканалом или программой прямых трансляций, лучше ли иметь один отдельный индекс, содержащий общий объект, помеченный атрибутом логического типа, или лучше иметь несколько индексов, по 1 для каждого объекта (фильм, эпизод шоу, канал, программа)? Кроме того, некоторые из этих объектов, например фильмы, могут иметь атрибуты метаданных на нескольких языках.

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

1 Ответ

0 голосов
/ 28 июня 2018

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

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

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

Что касается языка, вам нужно использовать специфичные для языка поля, такие как title_en, title_es, title_de. В идеале во время запроса вы знаете язык вашего пользователя (из браузера, потому что он выбрал его явно, ...) и затем выполняете поиск в доступных для этого полях. Обязательно используйте анализаторы языка для этих полей, в запросе и во время индекса.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...