数据库应该具备什么样的全文检索能力?

John Doe 十月 23, 2022

这是一个信息爆炸的时代,全文检索实在是太重要了。IT 行业只要涉及到内容信息相关的业务,都会有全文检索的需求。在我们的工作和生活中,都会在各种设备和各种互联网平台上面,生产和关注自己感兴趣的内容信息,这些信息同样需要组织整理,方便以后的检索需要。

全文检索的能力经常是通过数据库来构建的,那么,数据库产品应该具备什么样的全文检索能力,才能更好的满足我们的各种需要呢?

通用数据库能力

首先,它最好是一款通用数据库产品,而不是一款专用于全文检索的数据库。这样我们就不需要有太多的学习负担了。用好一款数据库产品已经够难的了,为啥还需要去学习和管理多款不同的数据库呢?

检索准确性

检索的结果应该是准确的,这也要求数据库能够理解语义。MySQL 的全文检索在分词的时候,使用了简单的双字分词方法,就很难保证检索结果的准确性。

检索高效性

检索的过程应该是高效的。MySQL 的全文检索在分词的时候,使用了简单的双字分词方法,会产生大量无效的词语,也很难保证检索过程的高效性。同时,要保证检索的高效,往往需要数据库有适应检索场景的索引,如果还是使用普通的B树索引,是很难完成高效检索的。

资源开销低

检索过程消耗的资源应该是可以接受的,资源开销不能太高,只占用少量的 CPU 资源和内存资源,就可以完成检索过程。有很多的基于 PostgreSQL 的全文检索插件,以文件的形式存储语言词典信息,每个会话进程在全文检索的时候,都需要加载这样一个词典文件,会重复占用大量的内存资源。

语言词典易于更新

检索使用的语言词典应该是容易维护更新的,文本分词时的停止词也应该是很容易进行配置修改的。很多基于 PostgreSQL 的全文检索插件,以文件的形式存储语言词典信息。这些词典文件有些是二进制格式的(可能是为了加速词典的加载和访问性能),难以进行更新;有些是文本格式的,难以查询匹配的词语,也不方便维护更新(更新往往需要重新编译和安装插件)。

结语

那么,到底有没有这样一款数据库呢?答案是有的。Redrock Postgres 就是这样一款数据库。它是基于语言词典进行分词的,词典采用系统表的形式存储管理。

如果想要了解它的全文检索的使用方法和内部原理,可以查看文档内容:全文检索。想要学习如何基于 Redrock Postgres 搭建搜索引擎,可以查看文档内容:搜索引擎