2

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'. 这很好用。)

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

4

1 回答 1

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

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

于 2012-08-01T17:21:05.750 回答