Как внедрить встроенную полнотекстовую поисковую систему
-
01-07-2019 - |
Вопрос
В одном из наших коммерческих приложений (Win32, написанном на Delphi) мы хотели бы реализовать полнотекстовый поиск.Приложение хранит пользовательские данные в каком-то двоичном формате, который непосредственно не распознается как текст.
В идеале я хотел бы найти либо встроенное решение (DLL была бы в порядке), либо локальный сервер, к которому я мог бы получить доступ через TCP (предпочтительно).API должен позволять мне отправлять текстовую информацию на сервер (вместе с метаданными, представляющими двоичный двоичный объект, из которого она была получена) и, конечно же, он должен позволять мне выполнять полнотекстовый поиск с хотя бы минимальной поддержкой логических операторов и поиска по подстрокам.Требуется поддержка Unicode.
Я нашел обширный список поисковых систем по Stack Overflow (Какие существуют Поисковые серверы?) но я действительно не понимаю, какой из этих двигателей мог бы удовлетворить мои потребности.Я подумал о том, чтобы спросить мнение Коллектива, прежде чем потратить день или два на тестирование каждого из них.
Есть какие-нибудь предложения?
Решение
На рынке есть несколько вариантов.Либо полностью готовые коммерческие продукты, либо варианты с открытым исходным кодом.Ваш выбор поставщика услуг поиска во многом зависит от клиентов, на которых вы ориентируетесь.
У Microsoft есть бесплатная экспресс-версия их поискового сервера.Насколько я знаю, экспресс-версия ограничена запуском уровня приложений на одном сервере.
Существует также В Apache Lucene, В проект с открытым исходным кодом.У него хороший API, который прост в использовании, и большое сообщество пользователей.Оригинальный проект основан на Java, но существуют и другие реализации такие , как Люцен для .NET, который я использовал лично.
Другие советы
Я бы рекомендовал взглянуть на SQLite - полнотекстовый поиск включен в последнюю версию.
Я полагаю, ответ зависит от вашей базы данных.Например, SQL Server имеет полнотекстовый поиск, а также запросы на английском языке, если это когда-либо потребуется.
Взгляните на использование PostgreSQL и tsearch.
Попробуйте использовать postgresql с tsearch
Сфинкс вероятно, это наиболее эффективный и масштабируемый вариант, в то время как SQLite - FTS3 это самый простой вариант.
Пока не в процессе, Солр очень быстрый (основанный на Lucene) и легко доступный с любой платформы (HTTP)