目前,我尝试通过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
,但该短语的其余部分与所有列匹配。
我该如何解决这个问题?
答案 0 :(得分:2)
单个短语...可以限制为匹配FTS表的指定列中的文本,方法是在其前面加上列名后跟冒号字符。
因此列名仅适用于单个短语。 如果您有三个短语,则需要指定三次列名:
tableName MATCH 'columnName:pizza columnName:is columnName:great'