Delphi中嵌入式数据库的全文搜索

10
我们正在创建一个开源的Twitter客户端,并正在寻找一个与Delphi兼容且适用于全文搜索(我知道这不太符合小占用空间的要求)的嵌入式数据库,并且易于使用。理想情况下,它应该是免费或开源的(我知道这很苛刻)。 我倾向于使用SQLite,但我以前没有使用过它,也不知道它是否支持全文搜索,或者它在Delphi中的工作效果如何。我以前使用过DBISAM,它具有嵌入式全文搜索功能,但不是免费的。Firebird是我们考虑的另一种选择。可能会有一种组合使其起作用。您会使用什么,并且对于1)占用空间,2)全文搜索,3)免费/开源,它的评价如何? 更新:感谢大家的建议。有太多好的选择可以选择了。

+1. 我非常期待看到结果。 - Lieven Keersmaekers
我听了这个播客,我会选择Firebird,也许还会用Lucene(Java Lucene或Dotlucene)作为全文搜索(Delphi可以链接到任何东西)。Firebird将允许某人使用完整的或嵌入式数据库(多用户的完整FB可能会变得有趣...)。 - Osama Al-Maadeed
14个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
8
我一直很成功地使用DiSQLite。它支持FTS和许多其他功能。他们有免费版和专业版。我相信免费版也支持FTS。我尝试过许多Delphi的SQLite实现,这是我见过的最好的一个。它可以直接编译到您的应用程序中,因此没有外部DLL。 我查看了许多Delphi嵌入式数据库的免费库,其中许多已不再受支持,从未发布或仅适用于Delphi5。

DiSQLite看起来真的很不错。谢谢! - Jim McKeeth
在DISQLite中(使用FTS或LIKE),如何处理不区分大小写的搜索?SQLIte和DISQLite仅针对西欧语言处理不区分大小写的搜索,并且仅支持其他代码页的区分大小写搜索。在实际应用中,区分大小写的搜索并不是非常有用的。 - Marek Jedliński

4

Sybase Advantage Database Server具有免费的本地服务器引擎(多线程和记录级锁定),优秀的Delphi TDataSet后代组件(包含源代码)以及出色的全文搜索引擎。

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

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

在线帮助中详细介绍了索引选项等内容:

http://tinyurl.com/ctjoqg


3
我知道火鸟数据库有sphinx这个附加组件用于全文搜索(尽管根据官方网站的说法,它距离真正的“全文搜索”还很远),它是免费/开源的,但我找不到任何信息表明它是否与嵌入式版本的火鸟数据库一起使用。

3

2
继续使用SQLite吧。Delphi有很多免费的SQLite组件,其中一些已经停止维护。但值得注意的一个组件是ZeosDB。ZeosDB正在积极维护,并且其对SQLite的支持也非常完美。如果您需要其他数据库引擎的支持,ZeosDB也是答案(它支持MySQL、PostgreSQL、Interbase、Firebird、MS SQL、Sybase、Oracle和SQLite)。

2
NexusDB有一个免费的嵌入式版本,当然它是一个本地的Delphi产品。这里是它全文搜索实现的描述。

2

我们已经将DotLucene集成到一个内部基于Delphi的应用程序中,使用Hydra(当时Mike完成了这项工作);如果这是我们想要追求的选项,我相信我们可以提取出来并使其可重复使用于此项目。


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具有巨大优势,尽管对于单用户桌面应用程序来说这并不一定有任何影响。


1

我会选择使用Sqlite,使用Aducom Sqlite组件更容易处理sqlite,而不是DiSQLite,它们是免费的并且作为TDataset组件工作,我会投票支持sqlite,因为:

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

1

Sqlite基本上是单用户/单连接的。更新操作会锁定整个数据库。您可以通过设置其他连接的超时值来处理这个问题(默认情况下没有超时)。根据您使用的值,多用户访问可能会变得非常慢和/或频繁超时。

我曾经使用过来自http://www.aducom.com/的Asqlite组件。免费且开源。目前看起来还不支持d2009,但正在进行开发。还有其他一些组件集,但我没有使用过其他的。

您可以使用Rubicon(现在由http://www.href.com/rubicon新管理)为任何Delphi应用添加全文搜索功能。但是这是收费的 :(


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,