Sqlite3 的全文搜索工具 - FTS3 - 允许使用 MATCH 运算符进行快速全文搜索:
SELECT ItemId FROM docs WHERE docs.text MATCH 'linux'
但是,它不支持 SQL 查询中存在 MATCH 的任何位置使用 OR 运算符(来源: 1 、 2 ):
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/