Я пытаюсь найти лучший способ организовать своего рода каталог продукции. Я читал все об общем шаблоне, используемом для каталога продуктов, но мой случай другой. Это не электронная коммерция, а просто библиотека с описанием продуктов.
Каждый день провайдер выпускает ежедневный индекс с новыми продуктами. С помощью задачи в моем приложении rails я добавлю в базу данных новый продукт (или обновлю обновленные).
Каждый продукт является объектом Json, и этот объект Json содержит всю информацию . Не только продукт, но и организация внутри категорий ... Это json образец ...
{
"msg":"OK",
"data":{
"Dictionary":{},
"GeneralInfo":{},
"Image":{},
"Multimedia":[],
"Gallery":[],
"FeaturesGroups":[],
"FeatureLogos":[],
"ReasonsToBuy":[],
"Reviews":[],
"ProductRelated":[],
"Variants":[],
"ProductStory":[],
"DemoAccount":true
}
}
У меня есть изображения, у меня есть категория продукта, у меня есть таблица данных, я у меня есть все, что мне нужно для создания своего "демонстрационного" представления, в котором я показываю отдельный продукт. документы. Я прочитал какой-то учебник и сейчас поставил параметр MongoDB в режим ожидания, мое приложение использует Postgres, и я не хочу добавлять другую базу данных, если она действительно не нужна.
Кстати, мое решение.
Для «демонстрации продуктов» я начинаю создавать таблицу с двумя атрибутами: кодом продукта и полем jsonb, в котором я храню весь свой продукт. Это просто, я использую название продукта для URL-адреса, а в представлении я использую данные json.
Но в моем каталоге есть еще две особенности: возможность сравнения от 2 до 4 продуктов одной категории и некоторый многогранный поиск. Вот мои сомнения.
Чтобы сравнить продукт из той же категории, я могу использовать компонент Vue, но мне нужно запросить категорию. Категория теперь является атрибутом моего товара json data, это узел внутри GeneralInfo
. Поэтому я думаю «извлечь» категорию из json в индексированном атрибуте моей таблицы продуктов.
Мне также нужно добавить базовый c фасетный поиск технических характеристик. Технические характеристики находятся внутри узла FeaturesGroups моего объекта продукта. Я читал об ElasticSearch, я читал о MongoDB anche. Я знаю, что Mon go имеет встроенную функцию фасетного поиска. Но, как я уже говорил, я никогда ее не использую.
Мое решение на данный момент состоит в том, чтобы использовать другие данные, предоставляемые моим поставщиком таблицы данных, дерево FeaturesGroups для каждой категории и Feature для каждой FeaturesGroups, с минимальным и максимальным значением, вычисленным для продуктов базы данных.
Итак, резюмируем, три таблицы:
Products:
id
name
category_id
data (jsonb)
Category
FeaturesGroups
category_id
features (jsonb) -> every feature with min and max value
Для фасетного поиска я создаю фильтры, используя таблицу FeaturesGroups, а затем запрашиваю поле данных таблицы продуктов.
Что-то не так с этим подходом? Есть ли что-то, что я могу улучшить?