SQlite 全文搜索(FTS)?

Posted

技术标签:

【中文标题】SQlite 全文搜索(FTS)?【英文标题】:SQlite Full text search (FTS)? 【发布时间】:2016-02-03 10:09:04 【问题描述】:

我对 sqlite 上的 FTS 有疑问。

创建表:

CREATE VIRTUAL TABLE mail USING fts3(subject, body);

插入演示数据

INSERT INTO mail(docid, subject, body) 
VALUES(1, 'software feedback' 'found it too slow');

INSERT INTO mail(docid, subject, body) 
VALUES(2, 'software feedback', 'no feedback');

INSERT INTO mail(docid, subject, body) 
VALUES(3, 'slow lunch order',  'was a software problem');

搜索查询代码

SELECT * 
FROM mail 
WHERE subject MATCH 'software*';    ==> Selects rows 1 and 2

SELECT * FROM mail WHERE body MATCH 'feedback';    ==>  Selects row 2

SELECT * FROM mail WHERE mail MATCH 'software*';    ==> Selects rows 1, 2 and 3

SELECT * FROM mail WHERE mail MATCH 'slow';        ==> Selects rows 1 and 3

但是,当我想在一个单词中搜索文本时。例如:我想搜索任何包含字符“o”的单词:

例如:

SELECT * 
FROM mail 
WHERE mail MATCH 'o';

我没有得到任何结果...

谁能帮帮我?

【问题讨论】:

FTS 不使用模式搜索文本列。你描述的是一个简单的LIKE声明。 【参考方案1】:

您是否考虑过使用LIKE 运算符?如果您想要mail 表中的任何记录,其中mail 字段中有一个或多个o 字母,您可以试试这个:

SELECT * FROM mail WHERE mail LIKE '%o%';

【讨论】:

感谢您的评论,但我需要查询大数据。这就是为什么我必须使用 FTS。如果我们使用“LIKE”,它可以工作,但在大数据上非常慢。 如果您真的想扫描整个字符串以查找单个字符,我不确定是否有任何解决性能问题的方法。

以上是关于SQlite 全文搜索(FTS)?的主要内容,如果未能解决你的问题,请参考以下文章

Peewee 可以使用 SQLite 的 FTS5(全文搜索)辅助函数 highlight() 吗?

SQLite FTS3 - 对多个表进行全文搜索

SQLite 全文搜索相关性排名

SQLite第三课 源码编译错误以及解决

是否可以将全文搜索 (FTS) 与 LINQ 一起使用?

Android中的全文搜索示例