目前,我正在尝试通过 libsqlite 执行 FTS5 查询,并且需要将查询限制为特定列。在 FTS4 中,这可以通过以下方式实现:SELECT foo, bar FROM tableName WHERE columnName MATCH ?
然后将搜索字符串绑定(bind)到语句。但是,对于 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
,但该短语的其余部分与所有列匹配。
我该如何解决这个问题?
最佳答案
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'
关于sql - 如何将整个 FTS5 查询限制为单个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41757059/