如何将整个 FTS5 查询限制为单个列?

cau*_*lux 7 sql sqlite

目前,我正在尝试通过 libsqlite 执行 FTS5 查询,并且需要将查询限制到特定列。在 FTS4 中,可以通过执行以下操作来实现:

SELECT foo, bar FROM tableName WHERE columnName MATCH ?

然后将搜索字符串绑定到语句。但是,对于 FTS5,MATCH 运算符的 LHS 必须是 FTS 表名本身,并且列名必须是查询的一部分:

SELECT foo, bar FROM tableName WHERE tableName MATCH 'columnName:' || ?

bind当ed 字符串是单个短语时,此方法有效。但是,请考虑搜索文本this is great。那么查询就变成:

SELECT foo, bar FROM tableName WHERE tableName MATCH 'columnName:pizza is great';

仅限pizzacolumnName,但短语的其余部分与所有列匹配。

我该如何解决这个问题?

CL.*_*CL. 4

文档

\n\n
\n

单个短语 \xe2\x80\xa6 可以被限制为匹配 FTS 表的指定列中的文本,方法是在其前面加上列名,后跟冒号字符。

\n
\n\n

因此列名仅适用于单个短语。\n如果有三个短语,则需要指定列名三次:

\n\n
tableName MATCH \'columnName:pizza columnName:is columnName:great\'\n
Run Code Online (Sandbox Code Playgroud)\n