在Delphi中使用嵌入式DB进行全文搜索

时间:2009-03-27 09:13:44

标签: delphi twitter full-text-search embedded-database

我们正在创建一个开源 Twitter client ,正在寻找一个可以与Delphi配合使用最小尺寸的嵌入式数据库,这非常适合全文搜索(我知道这种情况不会很小)。理想情况下它应该是免费的或开源的(要求我知道)。

我倾向于SQLite,但我之前没有使用它,也不知道它是否支持全文搜索,或者它与Delphi的工作情况如何。我之前使用过DBISAM,它嵌入了全文搜索,但不是免费的。 Firebird是我们考虑的另一种选择。

可能有一个组合使这项工作。你会用什么,以及如何评价1)足迹,2)全文搜索,3)免费/开源。

更新:感谢大家的建议。有很多好的选择可供选择。

14 个答案:

答案 0 :(得分:8)

我使用DiSQLite取得了很大的成功。它具有FTS支持和许多其他功能。他们有免费版和专业版。我相信免费版也可以使用FTS。我已经为Delphi尝试了很多SQLite实现,这是我见过的最好的实现。它直接编译到您的应用程序中,因此没有外部DLL。

我在Delphi中查看了许多用于嵌入式数据库的免费库,许多不再受支持,从未发布过,或只在Delphi5中工作。

答案 1 :(得分:4)

Sybase Advantage Database Server拥有免版税的本地服务器引擎(多线程和记录级别锁定),优秀的Delphi TDataSet后代组件(包括源代码)和一个出色的全文搜索引擎。

Advantage全文搜索支持AND,OR,NOT和NEAR运算符。 Advantage还提供SCORE和SCOREDISTINCT标量函数,它们返回搜索条件中所有单词实例的总数。

优势全文索引在记录更新时保持,这意味着它们不需要任何重建。索引采用压缩格式;因此,实际索引大小可以比物理数据小得多。可以对非索引数据执行全文搜索,但这需要对记录数据进行物理搜索,并且可能要慢得多。索引搜索使用位图过滤器以获得最佳性能。

就索引选项等而言,在线帮助包含所有细节:

http://tinyurl.com/ctjoqg

答案 2 :(得分:3)

我知道firebird有sphinx加载项进行全文搜索(虽然根据那里网站它是“远离真实的”全文搜索“'),它的免费/开源但我找不到任何信息,说它是否适用于嵌入版本的firebird。

答案 3 :(得分:3)

对于Firebird全文搜索,请查看:http://www.firebirdfaq.org/faq328/

莱昂纳多。

答案 4 :(得分:2)

我们已经使用Hydra将DotLucene集成到我们基于Delphi的内部应用程序之一(当时迈克做了相关的工作);如果这是我们想在这里寻求的选择,我相信我们可以提取并使其可重复用于此项目

答案 5 :(得分:2)

继续使用 SQLite 。 Delphi有很多免费的sqlite组件。其中一些已经不再是活跃的项目。但注意的一个组成部分是ZeosDB。 ZeosDB得到了积极维护,其sqlite支持也很完美。如果您需要其他数据库引擎支持,ZeosDB再次成为答案(它支持MySQL,PostgreSQL,Interbase,Firebird,MS SQL,Sybase,Oracle和SQLite)。

答案 6 :(得分:2)

NexusDB有一个free embedded version,当然它是一个原生的Delphi产品。

以下是full text search implementation的说明。

答案 7 :(得分:1)

为什么需要全文搜索?我不使用Twitter,我相信Twitter消息最多140个字符?这些将适合一个varchar字段。您不需要全文搜索来查找此类字段中的内容。

答案 8 :(得分:1)

我建议应该强烈考虑DBISAM,或者现在可能是他们较新的ElevateDB。根据您以前的经验,我希望您知道它不会为您的可执行文件增加太多大小,相当快速,可靠,完美的基于Delphi的解决方案,并且具有出色的支持。多年来,他们的SQL方言已得到改进,因此它现在非常适合ANSI SQL-2003的高度合规性。

DBISAM / ElevateDB就像你注意到的不是开源,但许可成本仅限每个开发人员(不是每个部署),所以如果只涉及少数开发人员,那么成本(在我看来)可以忽略不计。当您考虑DBISAM / Elevatesoft新闻组的支持和响应水平时,许可成本尤其合理,主要开发人员/所有者(Tim Young)积极参与回答问题和解决问题。除了专有解决方案的成本之外,当然还关注业务是否能够生存,以及将来是否会继续开发和支持产品。这是你必须为自己权衡的东西,但发展似乎一如既往地强大。他们为他们的数据库提供.NET提供程序,并支持使用FreePascal / Lazarus进行跨平台开发。

DBISAM的全文搜索的一个优点是它紧密集成到SQL中。也就是说,您可以发出一个SELECT语句,该语句直接将某些字段上的普通WHERE条件与其他字段上的全文搜索条件相结合。根据您的需求,这是一个很好的功能,使得使用不同的全文解决方案做一些需要更多工作的事情变得非常简单和快速。我认为大多数附加解决方案,如Lucene和其他可能与Firebird一起使用的解决方案,不会与常规SQL紧密集成,并限制您仅使用全文标准检索一组记录。类似Textolution的Firebird专有附加组件(http://www.textolution.com/ftsib_example.asp)似乎可以容纳构建单一复杂(嵌套)查询,该查询将应用常规和全文标准,但DBISAM更优雅地完成它。无论如何,在开源数据库中添加一个专有的附加组件会破坏开源的目的。

我认为,DBISAM / ElevateDB的全文搜索的一个缺点是仅支持使用'AND'和'OR'条件,没有任何邻近搜索。

我注意到SQLite有一个全文解决方案,http://www.sqlite.org/cvstrac/wiki?p=FullTextIndex。我从未使用过SQLite,但我知道很多人都喜欢它。我非常确定DBISAM / Elevatesoft具有很大优势的一个领域是需要强大锁定功能的多用户应用程序,但对于单用户桌面应用程序来说,这根本不会带来任何重量。

答案 9 :(得分:1)

我会使用Aducom Sqlite组件使用Sqlite,它们比使用DiSQLite更容易使用sqlite,免费并且作为TDataset组件工作,我会投票支持sqlite,因为:

  1. 这是一个非常快速和紧凑的数据库。
  2. 占地面积非常小,仅约200kb Dll。
  3. 与Aducom组件一起使用时可以静态链接,因此不需要分发dll。
  4. 内置支持全文搜索。
  5. 它在许多免费和商业应用中被广泛使用和用作外部存储。
  6. 它具有大部分标准SQL,因此将使用您在sql中的大部分知识。

答案 10 :(得分:1)

Sqlite只是单用户/单连接。执行更新会锁定整个数据库。您可以通过为其他连接设置等待的超时值来处理此问题(默认为无超时)。多用户访问可能变得非常慢和/或频繁超时,具体取决于您使用的值。

我使用了http://www.aducom.com/中的Asqlite组件。免费和开源。目前不支持d2009,但它正在开发中。还有许多其他组件集,但我没有使用任何其他组件。

您可以使用Rubicon(现在在http://www.href.com/rubicon的新管理下)向任何delphi应用添加全文搜索。然而,这不是免费的:(

答案 11 :(得分:0)

还有DotLucene,它确实需要安装.NET框架,但可以通过.net com apis轻松加载。它是搜索的理想选择,并且具有大多数搜索引擎通用的查询格式。

答案 12 :(得分:0)

我在这里有一个半工作的Delphi解决方案:http://sourceforge.net/projects/mutis/,一个Delce of Lucene的端口。

它的正常运作很好,但不幸的是基于死亡的Delphi.NET实现,因此需要更新到本机的工作(是的,采用.NET路由是一个很大的错误:()

答案 13 :(得分:-1)

DBISAM一路走来。作品,非常扎实,嵌入式,全文索引非常有效(丰富的个人经验!)

ElevateDB也很好,但我没有直接经验。