千家信息网

SQLite3如何实现数据库全文搜索

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要为大家展示了"SQLite3如何实现数据库全文搜索",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"SQLite3如何实现数据库全文搜索"这篇文章
千家信息网最后更新 2026年11月02日SQLite3如何实现数据库全文搜索

这篇文章主要为大家展示了"SQLite3如何实现数据库全文搜索",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"SQLite3如何实现数据库全文搜索"这篇文章吧。

对于应用软件开发人员来说,要解决这个问题有许多的方案可以选择。如,利用 MySQL 和 PostgreSQL 或者 Sphinx 和 Lucene 这样的独立软件进行本地执行。然而,这些要么用起来棘手,要么就过度了。

幸运的是,Google 为 SQLite 贡献了一些资源以实现帮助。在版本 3.3.8 中第一次实现全文检索。此版本提供的功能可以创建一个依赖于外部延伸的虚拟表:在这里,全文搜索运算法则可用于任何虚拟表内的文本列。在PHP 5.3.0中,对应的支持只被默认的 PDO 和 SQLite3 激活。较早版本的PHP可以使用 PECL 的 SQLite3 扩展库。

并安装 SQLite 最新版本

# wget http://www.sqlite.org/sqlite-amalgamation-3.6.22.tar.gz
# tar -zxvf sqlite-amalgamation-3.6.22.tar.gz
# cd sqlite-3.6.22/

# CFLAGS="-DSQLITE_ENABLE_FTS3=1" ./configure
# make
# make install

完成

查看版本

# sqlite3 --version

创建一个搜索索引通常情况如下:

  • 把文本分解成记号。

  • 转换为小写字母。

  • 确定根词。

  • 建立索引。

在默认情况下,SQLite 提供了两个基本的分词器,Simple 和 Porter。它们可以控制字的分开方式。Simple 根据空格和标点符号将文本分解成不同的记号。Porter是专为英文使用而设计,它可以将大量的文字扩展化解为基础形式。例如,condolidate,consolidated,和 consolidating 这一类词语都会被转变成consolid。

遗憾的是,SQLite目前还没有取消停用词。所以常用词,例如,the,of和to仍位于索引内。这会极大地扩充索引的范畴并减缓搜索速度。最简单的解决办法是,在按下确认检索之前手动除去停用词。

下面,向您展示一些代码,教你如何创建自己的第一个全文索引。 SQLite之所以做到这些,是因为它通过使用FTS3扩展建立一个虚拟表。只有文本列位于这个虚拟表以内时,才可以被搜索,并且最后一列用来识别使用的分词器类型。

CREATE VIRTUAL TABLE example
USING FTS3(title TEXT, TOKENIZE SIMPLE)

创建表后,您可以使用 SELECT, INSERT,UPDATE 和 DELETE 语句查询此表。此处要附加说明的是:没有进一步的索引可以建立在表格上,所以简单的查询将导致对全表的扫描。

一旦你键入一些数据,你就可以试试。
本文中其余的例子,我会使用出自英文版维基百科的所有标题。
我的有 5,453,838 行,相比较于没有索引时的 146MB,若使用全文索引,其大小是 233MB。

检索

搜索索引由匹配操作完成。查询可以包含多个方面,在这种情况下,只有文字行包含所有条件时才返回。还有支持"OR"的查询,但该查询排除了条件,精确的词组匹配以及前缀检索。

SELECT rowid, title FROM example WHERE title MATCH tea bag
SELECT rowid, title FROM example WHERE title MATCH tea OR bag
SELECT rowid, title FROM example WHERE title MATCH tea -bag
SELECT rowid, title FROM example WHERE title MATCH "tea bag"
SELECT rowid, title FROM example WHERE title MATCH tea*

请注意:OR区分大小写,并且在一次查询中只允许一个MATCH操作。

创建片段

为了向匹配的搜索结果提供语境,可以使用 snippet() 功能。这一功能将突出显示搜索结果中任何文字列的关键词。

SELECT title, snippet(example)
FROM example
WHERE

以上是"SQLite3如何实现数据库全文搜索"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

搜索 索引 全文 查询 版本 数据 文本 检索 数据库 内容 功能 情况 文字 篇文章 帮助 只有 大小 搜索结果 条件 结果 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖北九亚互联网络科技有限公司 上海卓越科技互联网 华服互联网科技怎么样 互联网的科技 美国互联网科技 壕鑫互联网络科技 深圳天众互联网科技公司 碳银互联网科技有限公司 天下捷融互联网科技 安控科技rtu产品工业互联网 成都互联网科技公司100强 消费医药和互联网科技 允成互联网科技有限公司融资 用友工业互联网科技发展 特约风豹互联网科技为什么扣费 互联网公司高科技产品 互联网金融运营模式中的金融科技 科技美学互联网 艺术 互联网科技创业有什么好项目 山东亿川互联网科技有限责任公司 朗新科技与工业互联网 科技与互联网发展 贷财互联网科技 深圳国际航运科技和互联网 北京大学互联网科技怎么样 互联网经济与金融科技 亳州好赞互联网科技有限公司 银川新华互联网科技学校联系电话 互联网科技机房 亚光科技低轨卫星互联网
0