Ваша проблема хорошо подходит для ориентированного на документы магазина, такого как Lucene.Например, вы можете создать схему, такую как
Тип
Сорт
Цвет
Источник DateSold и т. Д .:
Затем вы можете написать запрос Lucene, такой как Type: Fruit ANDЦвет: зеленый.Вы также можете создавать вложенные запросы, такие как (Fruit: Straberry И Color: Deep Red) И НЕ Происхождение: Испания.
Apache Lucene - это библиотека Java с портами, доступными для большинства основных языков. Apache Solr - это полноценный поисковый сервер, построенный с использованием Lucene lib и легко интегрируемый в выбранную вами платформу, поскольку он имеет RESTful API.
BTW Solr имеет то, что называется фасеткой, которая позволяет пользователю фильтровать результаты, используя каждый из указанных выше критериев.Таким образом, пользователь вводит фрукты в поле поиска и затем возвращает результаты.
Тип: - Фрукты (109) - Орех (99)
Происхождение: - Испания (32) - Франция (39)
Цвет: - Красный (22) - Темно-красный (45)
Нажатие на каждую из граней фильтрует результаты с пересечением.Поэтому, если вам нужна более удобная модель взаимодействия, фасетирование / фильтрация намного проще, чем заставлять пользователей печатать обширные запросы Lucene.
Обновление: вам все равно может потребоваться выполнить некоторый лексический анализ, если вы хотите разрешитьпользователи набирают запросы на естественном языке и разбивают их на части, но, учитывая чрезвычайно сложную задачу, я бы предложил использовать простой и мощный метод фасетирования.Надеюсь, это поможет.