Как реализовать удобный фильтр по параметрам при работе с бд? Есть определенные параметры, к примеру цвет, длина, вес которые приходят с UI. В контроллере все это обрабатывается как-то. И уже на слое репозитория согласно параметрам надо извлечь нужные объекты. К примеру сначала выбирается допустим вес 20кг, а потом еще + параметр длина 2м, итого уже два параметра в запросе должно участвовать. И так до +5...10 параметров. Предлагать все Hibernate, Jpa, Spring jdbc, data-jpa. Может есть какой-то незамысловатый способ это осуществить?
Вариант 1. Используйте Apache Lucene либо Sphinx. Apache Lucene написан на Java, поэтому легко его интегрировать в проект на Spring. Sphinx запускается как отдельный процесс с общением по TCP (или через pipe), поэтому нужно писать свой менеджер подключений или использовать порт API на JAVA, который последний раз обновлялся лет 10 лет назад. Но Sphinx есть меньше ресурсов, а для Lucene нужно от 2 Гб RAM для нормальной работы.
Вариант 2. Создаете 3 таблицы:
item
- товар, property
- свойство, item_property
- соответствие свойства товару.
Например, будет:
item:
---------
id | name
---------
1 | IPhone
property:
---------
id | name
---------
1 | Вес
2 | Цвет
item_property:
-----------------------------
item_id | property_id | value
-----------------------------
1 | 1 | 5
1 | 2 | белый
Тогда выбирать вы будете через INNER JOIN
и UNION ALL
. То есть для запросов Hibernate вам не поможет - нужно будет использовать нативные запросы.
Есть массив из n элементов, и есть массив из k элементов, так вот, мне нужно что бы К массив заполнялся элементами из n, но при условии что n < k