Sqlite FTS,在匹配操作符之间使用OR

7
当我在一个sqlite引擎(安卓或sqlitebrowser)中执行以下查询时,它会抛出一个异常,显示“无法在请求的上下文中使用MATCH函数”。
select
    a.Body1,
    b.Body2
from
    tbl1_fts  as a,
    tbl2_fts  as b
where
    a.ID = b.ParentID and

    (
        a.Body1 match('value') or
        b.Body2 match('value')
    )

- 两个表都有全文搜索功能。
- 在两个匹配项之间使用And运算符(而不是OR)可以正常运行。

我该如何修复或更改查询以满足上述条件?

4个回答

1
这个 SQL 在 FTS5 中对我起作用了。
select 
  *
from 
  "card" 
  inner join "note" on "card"."noteId" = "note"."id" 
  inner join "noteFtsTag" on "noteFtsTag"."rowid" = "note"."rowid" 
  inner join "cardFtsTag" on "cardFtsTag"."rowid" = "card"."rowid" 
where 
  (
    "noteFtsTag"."rowid" in (
      select 
        "rowid" 
      from 
        "noteFtsTag" 
      where 
        "noteFtsTag"."tags" match ?
    ) 
    or "cardFtsTag"."rowid" in (
      select 
        "rowid" 
      from 
        "cardFtsTag" 
      where 
        "cardFtsTag"."tags" match ?
    )
  )

应该也适用于FTS3;来源:https://sqlite.org/forum/forumpost?udc=1&name=1a2f2ffdd80cf795

1
"

MATCH作为一个函数将会有两个参数:

"
... WHERE match('value', SomeColumn) ...

然而,通常使用MATCH的方法是作为运算符:
... WHERE SomeColumn MATCH 'value' ...

1

您不能使用OR操作符,只需更改匹配关键字即可。 例如: SELECT * FROM docs WHERE docs MATCH 'sqlite OR database';

或者您可以使用union。

SELECT docid FROM docs WHERE docs MATCH 'sqlite AND database' UNION SELECT docid FROM docs WHERE docs MATCH 'library';


-1

MATCH必须在没有括号的情况下使用。

在使用FTS时,ANDOR运算符必须大写。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接