Delphi中嵌入数据库的全文检索

Delphi中嵌入数据库的全文检索,delphi,twitter,full-text-search,embedded-database,Delphi,Twitter,Full Text Search,Embedded Database,我们正在创建一个开源的,并且正在寻找一个嵌入式数据库,它的占用空间尽可能小,可以与Delphi一起工作,并且能够很好地进行全文搜索(我知道这与占用空间小不太匹配)。理想情况下,它应该是免费的或开源的(我知道要求很高) 我倾向于,但我以前没有使用过它,也不知道它是否支持全文搜索,或者它与Delphi的配合如何。我以前用过,它嵌入了全文搜索,但不是免费的。这是我们考虑的另一个选择 可能有一种组合使这项工作起作用。你会使用什么,以及它对1)足迹、2)全文搜索、3)免费/开源的评价 更新:感谢大家的建议

我们正在创建一个开源的,并且正在寻找一个嵌入式数据库,它的占用空间尽可能小,可以与Delphi一起工作,并且能够很好地进行全文搜索(我知道这与占用空间小不太匹配)。理想情况下,它应该是免费的或开源的(我知道要求很高)

我倾向于,但我以前没有使用过它,也不知道它是否支持全文搜索,或者它与Delphi的配合如何。我以前用过,它嵌入了全文搜索,但不是免费的。这是我们考虑的另一个选择

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


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

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

还有DotLucene,它确实需要安装.NET framework,但可以通过.NET com API轻松加载。它非常适合搜索,并且具有大多数搜索引擎通用的查询格式。

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

我知道firebird有用于全文搜索的附加组件(尽管根据那里的网站,它“远不是真正的”全文搜索“),它是免费/开源的,但我找不到任何信息说明它是否与firebird的嵌入式版本兼容。

有关firebird全文搜索,请查看:


莱昂纳多。

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


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

我建议应该大力考虑DBISAM,或者现在可能是他们较新的ElevateDB。根据您以前的经验,我希望您知道它不会给您的可执行文件增加太多大小,它是一个相当快速、可靠、完美的基于Delphi的解决方案,并且具有出色的支持。多年来,他们的SQL方言已经过改进,所以现在非常好,符合ANSI SQL-2003标准

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

DBISAM全文搜索的一个优点是它与SQL紧密集成。也就是说,您可以发出一条SELECT语句,直接将某些字段上的普通WHERE条件与其他字段上的全文搜索条件结合起来。根据您的需要,这是一个很好的功能,它可以让您使用不同的全文解决方案来做一些需要更多工作的事情变得非常简单和快速。我认为大多数附加解决方案,如Lucene和其他可能与Firebird一起使用的附加解决方案,没有与常规SQL紧密集成,并且限制您仅检索具有全文标准的一组记录。类似于Textolution的Firebird()专有附加组件的东西看起来可以容纳构造同时应用常规和全文标准的单个复杂(嵌套)查询,但DBISAM做得更优雅。无论如何,在开源数据库中添加一个专有的附加组件有点违背了开源的目的

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


我注意到SQLite有一个全文解决方案。我从未使用过SQLite,但我知道很多人都喜欢它。我非常肯定DBISAM/Elevatesoft的一个优势是在多用户应用程序中,需要强大的锁定功能,尽管这对单用户桌面应用程序来说不一定有任何影响。

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

NexusDB有一个,当然它是一个本地的Delphi产品


以下是对它的描述。

我会选择使用Sqlite组件的Sqlite,它们比DiSQLite更容易使用Sqlite,而且是免费的,可以作为TDataset组件使用,我会投票支持Sqlite,因为:

  • 这是一个非常快速和紧凑的数据库
  • 占用空间非常小,大约200kb Dll
  • 当与一起使用时,它可以链接为静态