Позвольте мне разобрать проблему, это займет некоторое время.
Учтите, что в вашей системе есть сущности 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
и т. Д. Какие-либо подсказки на этот счет?
ПожалуйстаТакже обратите внимание, что мы должны также применить нумерацию страниц.Вот почему одиночный вложенный индекс не будет работать