Полнотекстовый поиск со встроенной БД в Delphi - PullRequest
10 голосов
/ 27 марта 2009

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

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

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

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

Ответы [ 14 ]

8 голосов
/ 27 марта 2009

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

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

4 голосов
/ 30 марта 2009

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

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

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

В интерактивной справке есть все подробности, касающиеся параметров индексации и т. Д .:

http://tinyurl.com/ctjoqg

3 голосов
/ 27 марта 2009

Для полнотекстового поиска Firebird смотрите: http://www.firebirdfaq.org/faq328/

Leonardo.

3 голосов
/ 27 марта 2009

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

2 голосов
/ 28 марта 2009

NexusDB имеет бесплатную встроенную версию и, конечно, это нативный продукт Delphi.

Вот описание реализации полнотекстового поиска .

2 голосов
/ 27 марта 2009

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

2 голосов
/ 27 марта 2009

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

1 голос
/ 28 марта 2009

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

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

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

1 голос
/ 28 марта 2009

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

  1. Это очень быстрая и компактная база данных.
  2. Очень маленькая занимаемая площадь, около 200 КБ Dll.
  3. Он может быть связан статически при использовании с компонентами Aducom, поэтому нет необходимости распространять dll.
  4. Имеет встроенную поддержку полнотекстового поиска.
  5. Он широко используется и используется во многих бесплатных и коммерческих приложениях в качестве внешнего хранилища.
  6. Он имеет большую часть стандартного SQL, поэтому большая часть ваших знаний в SQL будет использоваться.
1 голос
/ 27 марта 2009

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

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

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

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

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

...