目前,我正在尝试通过 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,但短语的其余部分与所有列匹配。
我该如何解决这个问题?
文档说:
\n\n\n\n\n单个短语 \xe2\x80\xa6 可以被限制为匹配 FTS 表的指定列中的文本,方法是在其前面加上列名,后跟冒号字符。
\n
因此列名仅适用于单个短语。\n如果有三个短语,则需要指定列名三次:
\n\ntableName MATCH \'columnName:pizza columnName:is columnName:great\'\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
832 次 |
| 最近记录: |