Sqlite3的全文搜索的限制不允许带有MATCH的OR。解决方法?

时间:2012-08-01 17:21:06

标签: sqlite fts3

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

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

但是,它在SQL查询中的任何地方都不支持OR运算符,其中存在MATCH(来源: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'。这样可以正常工作。)

有没有办法重写查询以便它可以工作(即使它有点慢)?

1 个答案:

答案 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

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