SQLITE3的全文搜索的限制不允许用火柴手术室。 解决方法?(A limitation of

2019-09-20 15:21发布

SQLITE3的全文检索工具 - FTS3 - 允许使用MATCH运营商进行快速全文检索:

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

但是,它不支持或运营商在SQL查询中,其中有相匹配的任何地方(来源: 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查询本身,即运营商混淆SELECT ItemId FROM docs WHERE docs.text MATCH 'linux OR unix' 。这工作得很好。)

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

Answer 1:

重写使用临时的意见,预计将工作查询:

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

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



文章来源: A limitation of Sqlite3's full text search doesn't allow ORs with MATCHes. Workaround?
标签: sqlite fts3