Эластичный поиск, хранящий иерархические данные и запрашивающий их - PullRequest
0 голосов
/ 04 октября 2018

Позвольте мне разобрать проблему, это займет некоторое время.

Учтите, что в вашей системе есть сущности A, B, C.

  • A является родителемвсе
  • B является дочерним для A
  • C может быть дочерним для A или B. Обратите внимание, что есть еще несколько объектов, таких как D,E,F, которыетакие же как C.Итак, давайте рассмотрим C только на время

Так что в основном это древовидная структура, такая как

   ```
     A
    / \
   /   \
  B     C(there are similar elements like D, E, F)
  |
  |
  C
   ```

Теперь нам нужно использовать Elastic Search в качестве вторичной БД для хранения этого,В базе данных структура совершенно иная, поскольку A, B, C имеют динамические поля, поэтому они представляют собой разные таблицы, и мы объединяем их для получения данных, но с точки зрения бизнеса это дизайн.

Теперь, когда мы пытаемся выровнятьэто и сохранить в es для набора

  • У нас есть объект A1, у которого есть 2 дочерних элемента C1 и B1, B1 имеет дополнительных дочерних элементов C2

    ABC

    1 A1 null null 2 ​​A1 null C1 3 A1 B1 null 4 A1 B1 C2

Теперь, что вы можете запросить

  • использование говорит, что он хочет Все столбцыA, B, C, где значение столбцов A равно A1, поэтому, добавив некоторые нулевые правила удаления, мы можем дать ему номер строки 2,3,4
  • , теперь проблема установлена, теперь пользователь говорит, что онхотите все A s, где значение A равно A1, поэтому в основном мы вернем ему все строки 1,2,3,4 или 2,3,4, поэтому мы увидим такие значения, как

    A

    A1 A1 A1

, но логически он должен видеть только один столбец A1, поскольку это единственное уникальное значение.Поскольку ES не имеет возможности group by вещей.

Так как мы решили вещи.

  • Мы решили эту проблему, создав несколько индексов и один вложенный индекс
  • Поэтому, когда нам нужно сгруппировать по индексу, мы переходим к вложенному индексу, а другой индекс работает как плоский индекс
  • , поэтому у нас другой индекс, например, индекс для A and B, A or B and C.Но у нас больше элементов, так что это приводит к созданию 5 индексов.
  • Поскольку данные начали увеличиваться, становится трудно поддерживать 5 индексов, и индексация их с нуля занимает слишком много времени.

Чтобы решить эту проблему, мы начали искать другие варианты и тестируем cratedb.Но, во-первых, мы все еще пытаемся выяснить, есть ли способ сделать это в ES, поскольку необходимо использовать многие функции ES, такие как percolation, watcher и т. Д. Какие-либо подсказки на этот счет?

ПожалуйстаТакже обратите внимание, что мы должны также применить нумерацию страниц.Вот почему одиночный вложенный индекс не будет работать

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