目前,我正在尝试通过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'