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

时间:2017-01-20 06:00:07

标签: 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';

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

documentation说:

  

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

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

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