Каков наилучший способ индексировать данные из таблицы реляционной базы данных отношения «один ко многим»

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

Мой сценарий:

1) Необходимо проиндексировать около 40 миллионов записей из таблицы оракула, в которой есть записи, имеющие от одной до многих записей отношений. А уникальность записей основана на составном ключе с 4 столбцами

2) После индексации Поиск должен поддерживать «полнотекстовый поиск» по всем полям.

3) Необходимо поддерживать фильтры и сортировку по выбранным полям.

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

1) Для каждой записи в таблице создайте запись в эластичном индексе

2) Создайте вложенный объект json на основе составного ключа, а затем добавьте этот эластичный индекс.

3) Механизм родительских дочерних отношений и соединения на стороне приложения не подходят для моего сценария.

Спасибо

Гириш Т С


person girish TS    schedule 27.07.2018    source источник


Ответы (1)


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

Здесь есть два решения:

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

  • Индексация каждой дочерней записи как отдельного документа с родителем -дочерние отношения в ElasticSearch

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

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

person AdrienF    schedule 05.08.2018