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

标签 sql sqlite

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

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/

相关文章:

c - 如何减少 SQLite 内存消耗?

php - 如果超出最大值,则删除表中的旧行

SQL检查组是否包含NULL

c# - 无法保存到数据库或从中检索(正确的信息)

sql - 从相同的列但不同的条件计数

SQLite:表中具有唯一列的重复行

mysql - 具有多个连接的 SQL 查询,我正在添加更多

sql - 在JDBC中根据日期提取记录

database - 在 Xamarin 的共享项目中添加项目引用

c++ - (SQLite + Qt + CodeBlock) 如何制作这 3 个作品?