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)?的主要内容,如果未能解决你的问题,请参考以下文章