Sqlite3的全文搜索限制不允许ORs具有匹配项。解决办法?

Sqlite3的全文搜索限制不允许ORs具有匹配项。解决办法?,sqlite,fts3,Sqlite,Fts3,Sqlite3的全文搜索工具FTS3允许使用匹配运算符进行快速全文搜索: SELECT ItemId FROM docs WHERE docs.text MATCH 'linux' 但是,它不支持SQL查询中存在匹配源的任何位置的OR运算符:,: 不要与FTS3查询本身中的或运算符混淆,即从docs.text与“linux或unix”匹配的文档中选择ItemId。这个很好用 有没有办法重写查询,使其即使稍微慢一点也能工作?使用临时视图重写查询将按预期工作: CREATE TEMP VIEW v

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

SELECT ItemId FROM docs WHERE docs.text MATCH 'linux'
但是,它不支持SQL查询中存在匹配源的任何位置的OR运算符:,:

不要与FTS3查询本身中的或运算符混淆,即从docs.text与“linux或unix”匹配的文档中选择ItemId。这个很好用


有没有办法重写查询,使其即使稍微慢一点也能工作?

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

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
如果临时视图不进行扫描,即它不会生成很多行,那么该速度将与没有临时视图的直接查询的速度相当

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