У меня есть список продуктов.
Каждый продукт имеет несколько вариантов (может быть несколько или сотни, каждый имеет цвет и размер, например красный)
Каждый вариант в наличии (в определенном количестве) на нескольких складах (склады аронуд 100).
Склады имеют коды, например, AB, XY, CD и т.д. c.
Если бы у меня был выбор, я бы ' d проиндексируйте его как:
stock: {
Red: {
S: { AB: 100, XY: 200, CD: 20 },
M: { AB: 0, XY: 500, CD: 20 },
2XL: { AB: 5, XY: 0, CD: 9 }
},
Blue: {
...
}
}
Вот тип запроса клиента, который я могу получить:
Покажите мне все продукты, которые имеют цвет Red.S на складе (минимум 100) на складах AB & XY.
Так что это, вероятно, будет фильтр типа
Red.S.AB > 100 AND Red.S.XY > 100
Я здесь не пишу весь запрос filter
, а просто в эластичном c.
Мы также можем получить запросы SUM, например, сумма запасов в AB и XY должна быть> 500.
Это было бы легко с помощью фильтра сценария, например Red.S.AB + Red.S.XY > 500
Проблема в том, что для 100 складов, 100 размеров, 25 цветов легко требуется 100 * 100 * 25 = 250 тыс. Сопоставлений. Elasticsearch просто не может обрабатывать такое количество ключей.
Простой ответ - использовать вложенные документы, но вложенные документы создают особую проблему. Мы не можем суммировать данный набор вложенных документов, а вложенные документы работают медленно, особенно когда мы собираемся иметь 250 тыс. На продукт.
Я также открыт для внешних решений, чем elasti c. Мы рельсы / postgres стек.