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

目前,我正在尝试通过libsqlite执行FTS5查询,并且需要将查询限制为特定列.在FTS4中,这可以通过以下方式实现:

SELECT foo,bar FROM tableName WHERE columnName MATCH?

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

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

当绑定字符串是单个短语时,这种方法有效.但是,请考虑搜索文本,这很棒.然后查询变为:

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

只有pizza限制为columnName,但短语的其余部分与所有列匹配.

我该如何解决这个问题?

最佳答案
documentation说:

A single phrase … may be restricted to matching text within a specified column of the FTS table by prefixing it with the column name followed by a colon character.

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

tableName MATCH 'columnName:pizza columnName:is columnName:great'
点赞