2009-03-27 2 views
10

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

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

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

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

+0

+1 Мне очень интересно, что получилось. –

+0

Я слушал подкаст, я бы пошел с firebird и, возможно, lucene (java lucene, или dotlucene), как FTS (Delphi может ссылаться на что угодно). Firebird позволит кто-нибудь, чтобы использовать полный или встроенный db (полный fb с несколькими пользователями может стать интересным ...) –

ответ

8

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

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

+0

DiSQLite действительно выглядит очень хорошо. Благодаря! –

+0

Как вы обрабатываете нечувствительный к регистру поиск в DISQLIte (используя FTS или LIKE)? SQLIte и DISQLite обрабатывают регистр без учета регистра только для западноевропейских языков и поддерживают только регистр-поиск других кодовых страниц. В реальной практике поисковые запросы, чувствительные к регистру, не очень полезны. –

1

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

+0

Вам нужна FTS, если вы хотите поддерживать запросы в стиле Google, такие как близость слова, сбой и т. д. –

+0

ah, true. Я думал о простых поисковых запросах. – Birger

+1

Плюс индексация всех слова независимо ускоряют процесс поиска, а не индексируют весь твит. –

0

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

2

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

3

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

1

Я бы предположил, что 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 имеет большое преимущество в многопользовательских приложениях, где требуются надежные функции блокировки, хотя это не обязательно будет иметь никакого веса вообще для однопользовательского настольного приложения.

2

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

1

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

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

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

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

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

-1

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

ElevateDB является вероятностным также большим, но у меня нет непосредственного опыта с ним.

4

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

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

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

Интерактивная справка есть все детали, насколько параметры индексации и т.д .:

http://tinyurl.com/ctjoqg

0

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

Мерия это работает отлично, но unfortunally была основана в смерти реализации Delphi.NET так requiere работа по обновлению в нативной (да, это была большая ошибка взять .NET маршрут :()

Смежные вопросы