Sqlite3的全文搜索工具 - FTS3 - 允许使用MATCH运算符进行快速全文搜索:
SELECT ItemId FROM docs WHERE docs.text MATCH 'linux'
但是,它在SQL查询中的任何地方都不支持OR运算符,其中存在MATCH(来源: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'
。这样可以正常工作。)
有没有办法重写查询以便它可以工作(即使它有点慢)?
答案 0 :(得分:2)
使用临时视图重写查询将按预期工作:
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
如果临时视图不是“扫描”,则速度将与“直接”查询(没有临时视图)的速度相当,即它不会产生大量行。