Полный текстовый поиск со встроенной БД в Delphi

Мы создаем открытый клиент Twitter и ищете встроенную базу данных с минимальным размером который работает с Delphi и хорошо подходит для полнотекстового поиска (я знаю, что это не очень хорошо подходит для небольших площадок). В идеале это должно быть бесплатным или открытым исходным кодом (требуя, я знаю).

Я склоняюсь к SQLite, но я не использовал его раньше и не знаю, поддерживает ли он полнотекстовый поиск, или насколько хорошо он работает с Delphi. Я использовал DBISAM раньше, и он встроен в полнотекстовый поиск, но не бесплатный. Firebird - еще один вариант, который мы рассмотрели.

Там может быть комбинация, которая делает эту работу. Что бы вы использовали и как это оценивалось для 1) Footprint, 2) Полный текстовый поиск, 3) Бесплатный/Открытый источник.

ОБНОВЛЕНИЕ: Спасибо всем за ваши предложения. Так много хорошего выбора на выбор.

Ответ 1

У меня был большой успех, используя DiSQLite. Он имеет поддержку FTS и массу других функций. У них есть бесплатная версия и профессиональная версия. Я считаю, что бесплатная версия FTS тоже. Я пробовал многие из реализаций SQLite для Delphi, и это лучшее, что я видел. Он компилируется прямо в ваше приложение, поэтому нет внешних библиотек DLL.

Я просмотрел множество бесплатных библиотек для встроенных баз данных в Delphi, и многие из них больше не поддерживаются, никогда не выпущены или работают только в Delphi5.

Ответ 2

Sybase Advantage Database Server имеет бесплатный сервер локального сервера (многопоточность и блокировка уровня записи), отличные компоненты Delphi TDataSet для потомков ( исходный код) и отличную полнотекстовую поисковую систему.

Полнотекстовый поиск Advantage поддерживает операторы AND, OR, NOT и NEAR. Advantage также предоставляет скалярные функции SCORE и SCOREDISTINCT, которые возвращают общее количество всех экземпляров слов в условии поиска.

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

В интерактивной справке есть все сведения относительно параметров индексирования и т.д.:

http://tinyurl.com/ctjoqg

Ответ 3

Я знаю, что firebird имеет sphinx дополнение для полнотекстового поиска (хотя, согласно этому сайту, он "далек от реального" полнотекстовый поиск"), его бесплатный/открытый источник, но я не могу найти какую-либо информацию, если она работает со встроенной версией firebird.

Ответ 5

Мы интегрировали DotLucene в одно из наших внутренних приложений на основе Delphi, используя Hydra (тогда Майк сделал работу над этим); если этот вариант мы хотим продолжить здесь, я уверен, что мы можем извлечь его и сделать его повторно используемым для этого проекта

Ответ 6

Вперед SQLite. Для Delphi существует множество БЕСПЛАТНЫХ компонентов sqlite. Некоторые из них перестали быть активными проектами. Но один из примечаний - ZeosDB. ZeosDB активно поддерживается, и его поддержка sqlite также идеальна. Если вам нужна другая поддержка движка базы данных, ZeosDB снова является ответом (он поддерживает MySQL, PostgreSQL, Interbase, Firebird, MS SQL, Sybase, Oracle и SQLite).

Ответ 8

Зачем вам нужен полный текстовый поиск? Я не использую Twitter, бу, я верю, что твиттер-сообщения имеют максимум 140 символов? Они бы вписывались в одно поле varchar. Вам не нужен полнотекстовый поиск, чтобы найти что-то в таком поле.

Ответ 9

Я бы предположил, что DBISAM, или теперь, вероятно, их новый ElevateDB, следует серьезно рассмотреть. Из вашего предыдущего опыта я ожидаю, что вы знаете, что он не добавляет большого размера к вашему исполняемому файлу, является достаточно быстрым, надежным, идеальным решением на основе Delphi и имеет отличную поддержку. На протяжении многих лет их диалект SQL был усовершенствован, поэтому теперь он очень хорош с высокой степенью соответствия ANSI SQL-2003.

DBISAM/ElevateDB, как вы заметили, не с открытым исходным кодом, но стоимость лицензирования зависит только от разработчика (не для развертывания), поэтому, если есть только несколько разработчиков, стоимость (на мой взгляд) незначительна. Стоимость лицензирования особенно разумна, если учесть уровень поддержки и отзывчивости, которые вы получаете в новостных группах DBISAM/Elevatesoft, где основной разработчик/владелец (Тим Янг) активно участвует в решении вопросов и решении проблем. Разумеется, помимо стоимости частного решения, существует также проблема, сохранится ли бизнес, и продукт будет продолжать развиваться и поддерживаться в будущем. Это то, что вы должны взвесить для себя, но развитие кажется таким же сильным, как и прежде. У них есть поставщики .NET для своих db и поддержка кросс-платформенной разработки с помощью FreePascal/Lazarus.

Один плюс для полнотекстового поиска DBISAM состоит в том, что он тесно интегрирован в SQL. То есть вы можете выпустить одну инструкцию SELECT, которая непосредственно объединяет обычные критерии WHERE в некоторых полях с критериями полнотекстового поиска для других. В зависимости от ваших потребностей, это приятная функция, которая делает его очень простым и быстрым, чтобы сделать некоторые вещи, которые потребуют больше работы, используя другое полнотекстовое решение. Я думаю, что большинство дополнительных решений, таких как Lucene и другие, которые могут быть использованы с Firebird, не интегрируются с обычным SQL и не позволяют вам получить набор записей только с полнотекстовыми критериями. Что-то вроде проприетарного дополнения Textolution для Firebird (http://www.textolution.com/ftsib_example.asp) похоже, что он может вместить построение единого сложного (вложенного) запроса, который будет применяться как к регулярные и полнотекстовые критерии, но DBISAM делает это более элегантно. И добавление проприетарного дополнения к открытому исходному дБ, вроде как побеждает цель выхода с открытым исходным кодом. В любом случае.

Один из недостатков полнотекстового поиска DBISAM/ElevateDB, я думаю, заключается в том, что поддерживается только использование условий "И" и "ИЛИ", не имеет никакого поиска близости.

Я замечаю, что для SQLite существует полнотекстовое решение, http://www.sqlite.org/cvstrac/wiki?p=FullTextIndex. Я никогда не использовал SQLite, но я знаю, что многие любят его. Одна из областей, где я уверен, что DBISAM/Elevatesoft имеет большое преимущество в многопользовательских приложениях, где требуются надежные функции блокировки, хотя это не обязательно будет иметь какой-либо вес для однопользовательского настольного приложения.

Ответ 10

Я бы пошел с Sqlite, используя Aducom Компоненты Sqlite, они просты в работе с sqlite, чем DiSQLite, бесплатно и работают как TDataset компонентов, я бы проголосовал за sqlite, потому что:

  • Это очень быстрая и компактная база данных.
  • Очень маленький размер, всего около 200 КБ Dll.
  • Он может быть связан статичным при использовании с компонентами Aducom, поэтому нет необходимости распространять DLL.
  • Он имеет встроенную поддержку полнотекстового поиска.
  • Он дико используется и используется во многих бесплатных и коммерческих приложениях в качестве внешнего хранилища.
  • Он имеет большинство стандартных SQL, поэтому большинство ваших знаний в sql будут использоваться.

Ответ 11

Sqlite - это в основном однопользовательское/единственное соединение. Выполнение обновления блокирует всю базу данных. Вы справляетесь с этим, устанавливая значение тайм-аута для ожидания других подключений (по умолчанию нет таймаута). Многопользовательский доступ может стать очень медленным и/или дать частый тайм-аут в зависимости от того, какое значение вы используете.

Я использовал компоненты Asqlite из http://www.aducom.com/. Свободный и открытый источник. В настоящее время не поддерживает d2009 по внешнему виду, но он находится в разработке. Есть и ряд других наборов компонентов, но я не использовал других.

Вы можете добавить полнотекстовый поиск в любое приложение delphi с помощью Rubicon (теперь под новым руководством на http://www.href.com/rubicon). Однако это не бесплатно: (

Ответ 12

Там также DotLucene, который требует установки .NET Framework, но может быть легко загружен через .net com apis. Он идеально подходит для поиска и имеет формат запроса, который является общим для большинства поисковых систем.

Ответ 13

У меня есть полурабочее решение Delphi здесь: http://sourceforge.net/projects/mutis/, порт Delphi Lucene.

Меньшинство его работает нормально, но, к сожалению, было основано на воплощении Delphi.NET в смерти, поэтому требовать работу над обновлением до родного (да, это была большая ошибка в пути .NET:()

Ответ 14

DBISAM полностью. Работает, очень прочная, встроенная, полнотекстовая индексация отлично работает (обширный личный опыт!)

ElevateDB также хорош, но у меня нет прямого опыта с ним.