目前,我正在尝试通过 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 ,但短语的其余部分与所有列匹配。

我该如何解决这个问题?

最佳答案

documentation 说:



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

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

关于sql - 如何将整个 FTS5 查询限制为单个列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41757059/

10-13 04:53