Поисковая система для базы данных продуктов MySQL с ~ 15 тыс. элементов

Мне нужна библиотека, которую я могу использовать на своем сайте, в которую я могу вводить названия и описания всех элементов, которые у меня есть, а затем вводить условия поиска на естественном английском языке и получать релевантные результаты. Я очень хочу изучить платные или даже SaaS-решения, а также программное обеспечение с открытым исходным кодом.


Чтобы избежать проблемы X/Y , вот моя проблема:

У меня есть эта база данных товаров, которые продаются на сайте электронной коммерции. Люди хотят найти предметы, и вверху есть панель поиска. До того, как я попал сюда, он просто брал каждое ключевое слово и выполнял запрос, похожий на

SELECT name,description,price,etc... 
FROM products 
WHERE name LIKE '%keyword1%' 
OR name LIKE '%keyword2%' 
OR description LIKE '%keyword1%' 
OR description LIKE '%keyword2%'

Затем я изменил его, чтобы использовать индекс FULLTEXT MySQL как для имени, так и для описания, а затем реализовал самодельное решение для анализа строк, таких как «4 фута», как в запросе, так и в заголовке, и сопоставлять их как измерения, а не как голый текст. Даже сейчас многие продукты не появляются, когда должны, или находятся слишком далеко в списке. После всего этого я понял, что кто-то уже делал это раньше, и мне следует использовать их код, а не пытаться сделать это самому, поскольку я уже потратил на это слишком много времени.

К вашему сведению, 15 000 товарных единиц — это не «большое» количество практически для любой базы данных.
@BasilBourque достаточно честно, я отредактировал соответственно.

Ответы (2)

Может быть полезно взглянуть на Apache Solr или ElasticSearch .

Вы можете установить их самостоятельно или воспользоваться услугами какого-нибудь поставщика SaaS, предлагающего их.

В MariaDB/MySQL уже есть (отличный) полнотекстовый поиск . Я рекомендую вам сначала попробовать использовать его вместо какой-либо сторонней библиотеки.

Как я уже упоминал в своем вопросе, я уже пытался использовать индекс полнотекстового поиска. Он работает хорошо, но недостаточно полнофункционален, чтобы соответствовать моим потребностям, и в итоге мне пришлось добавить к нему что-то, что быстро стало очень грязным. В частности, он не может искать номера деталей с тире и не позволяет установить приоритет одних ключевых слов над другими.