微信sqlite本地全文索引搜索是怎么做的呢

微信sqlite本地全文索引搜索是怎么做的呢,第1张

SQLite 索引(Index)是一种特殊的查找表,数据库搜索引擎用来加快数据检索。简单地说,索引是一个指向表中数据的指针。一个数据库中的索引与一本书后边的索引是非常相似的。

例如,如果您想在一本讨论某个话题的书中引用所有页面,您首先需要指向索引,索引按字母顺序列出了所有主题,然后指向一个或多个特定的页码。 下面是一个sqlite上建立索引的例子

CREATE INDEX index_name ON table_name

sqlite中支持fts表(full-text search的简称),fts3其实是sqlite的一个扩展模块,是虚拟表模块,允许用户去实现全文检索。下面是一个简单的例子:

Java代码

CREATE VIRTUAL TABLE enrondata1 USING fts3(content TEXT)

可以看到,使用上面的语法即创建了一个fts3的表了,而检索时,根据手册上说的:

SELECT count(*) FROM enrondata1 WHERE content MATCH 'linux' /* 0.03 seconds */

SELECT count(*) FROM enrondata2 WHERE content LIKE '%linux%'/* 22.5 seconds */

看到没?这里是使用match了,而不是传统的like,而且效率很高了。

还支持如下的语法:

SELECT * FROM words_fts WHERE words_fts MATCH 'description: company'

即列名:该列要搜索的关键词

还可以这样:

SELECT * FROM words_fts WHERE words_fts MATCH 'description: comp*'

即支持通配符了

索引主要是针对表中的一列或者是多列建立的升序或者是降序的排列。全文索引是索引的升级,他是针对整个文件的字符匹配。而且建立和全文索引以后就可以对创建了该索引的表进行全文检索.

虚拟表格是一个对象, 必须具有一个打开的, 可以SQLite 数据库连接从一个SQL 语句, 该虚拟table 对象看上去像其它的表或视图但在幕后, 从失败的查询在虚拟表的虚拟表格调用回调方法的对象而不是读取和写入的数据库文件

使用虚拟表的机制允许应用程序发布来自SQL 语句可访问接口, 就像它们是表SQL语句可以在概念集群队列虚拟表它们都可以执行一个真实表, 但下列情况除外:

无法上创建触发器虚拟表中

不能在虚拟创建额外的索引的表(虚拟表可以有索引, 但必须构建到虚拟表的实现不能添加带索引的单独使用CREATE INDEX 语句)

一个无法运行ALTER TABLE ...ADD COLUMN 针对虚拟表格命令.

支持全文搜索的,如下:

在Android中,使用的是sqlite,而如果需要在其中做全文检索的话,也是可以的。因为sqlite中支持fts表(full-text search的简称),详细的可以参考:

http://www.sqlite.org/fts3.html#section_1 ,这里介绍了FTS3和FTS4的区别,

这里的FTS3其实是sqlite的一个扩展模块,是虚拟表模块,允许用户去实现全文检索。下面是一个简单的例子:

[java] view plain copy

CREATE VIRTUAL TABLE enrondata1 USING fts3(content TEXT)

可以看到,使用上面的语法即创建了一个fts3的表了,而检索时,根据手册上说的:

SELECT count(*) FROM enrondata1 WHERE content MATCH 'linux' /* 0.03 seconds */

SELECT count(*) FROM enrondata2 WHERE content LIKE '%linux%'/* 22.5 seconds */


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11664370.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存