如何使用SQLite FTS3匹配表中多列中的多个文本?

时间:2016-09-26 15:04:42

标签: sqlite full-text-search fts3

我正在虚拟表的多列中搜索多个文本。我检查了this个帖子,这个搜索多列中的单个单词。

我检查了以下

SELECT * FROM table WHERE table MATCH (('A:cat OR C:cat') AND ('A:dog OR C:dog')

但似乎AND条件不起作用。

编辑我尝试了以下内容,

Select count (*) FROM Table1 WHERE TBL_VIRTUAL MATCH (('A:D* AND B:D* AND C:D*') OR ('A:tar* AND B:tar* AND C:tar*'));
Select count (*) FROM Table1 WHERE TBL_VIRTUAL MATCH (('A:D* AND B:D* AND C:D*') AND ('A:tar* AND B:tar* AND C:tar*'));

这两个查询都返回了相同的 109 结果。然后我尝试了@redneb在下面的回答中提到的内容:

SELECT * FROM table WHERE table MATCH '(A:D* OR B:D* OR C: D*) AND (A:tar* OR B:tar* OR C:tar*)'
SELECT * FROM table WHERE table MATCH '(A:D* OR B:D* OR C: D*) OR (A:tar* OR B:tar* OR C:tar*)'

但这会返回 0 结果。

有任何建议我在这里缺少!!

2 个答案:

答案 0 :(得分:2)

请改为尝试:

SELECT *
FROM mytable
WHERE mytable MATCH '(A:cat OR C:cat) AND (A:dog OR C:dog)';

但是,我怀疑以下查询的执行速度会更快:

SELECT *
FROM mytable
WHERE mytable MATCH '(A:cat AND C:dog) OR (A:dog AND C:cat)';

并且相当于第一个。

修改:这是一个完整的例子。让我们先创建并填充一个表:

CREATE VIRTUAL TABLE mytable USING fts3(A, C);
INSERT INTO mytable VALUES
    ('foo','bar'),
    ('dog','dog'),
    ('cat','cat'),
    ('dog','cat'),
    ('cat','dog');

然后查询按预期工作:

sqlite> SELECT * FROM mytable WHERE mytable MATCH '(A:cat AND C:dog) OR (A:dog AND C:cat)';
A           C         
----------  ----------
dog         cat       
cat         dog       

答案 1 :(得分:0)

对于 OR 条件类型 OR 之间,即:re.compile

对于AND条件,只需不要输入任何内容,即:MATCH ('A:cat OR C:cat')