sqlite - Sqlite 3's full text search doesn' 的限制不允许与 MATCH 进行 OR 运算。解决方法?

标签 sqlite fts3

Sqlite3 的全文搜索工具 - FTS3 - 允许使用 MATCH 运算符进行快速全文搜索:

SELECT ItemId FROM docs WHERE docs.text MATCH 'linux'

但是,它不支持 SQL 查询中存在 MATCH 的任何位置使用 OR 运算符(来源: 12 ):

SELECT ItemId FROM docs WHERE docs.text MATCH 'linux' OR column=value
error: unable to use function MATCH in the requested context

(不要与 FTS3 查询本身中的 OR 运算符混淆,即 SELECT ItemId FROM docs WHERE docs.text MATCH 'linux OR unix'。这很好用。)

有没有办法重写查询以使其正常工作(即使速度有点慢)?

最佳答案

使用临时 View 重写查询将按预期工作:

CREATE TEMP VIEW view1 AS SELECT ItemId FROM docs WHERE docs.text MATCH 'linux' 
SELECT * FROM docs WHERE ItemId IN view1 OR column=value
DROP VIEW view1

如果临时 View 不是“扫描”的,即它不会生成大量行,则速度将与“直接”查询(没有临时 View )的速度相当。

关于sqlite - Sqlite 3's full text search doesn' 的限制不允许与 MATCH 进行 OR 运算。解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11764357/

相关文章:

java.sql.异常: attempt to write on read-only database in java Swing Application

SQL:从 "nothing"中选择一个数字列表

sql - 在 SQLite FTS3 搜索中包含部分匹配项

Android 全文搜索和 ListAdapter

ruby - Heroku 和 Datamapper 问题

iphone - 如何将文档目录中的图像显示到 ImageView ?

iphone - iOS SQLite 求和和检索数据

SQLite 全文虚拟表正常可用吗?

android - 如何快速将表从一个数据库复制到另一个数据库

android - 获取 SQLite FTS3 表的行 ID