【发布时间】:2017-01-20 06:00:07
【问题描述】:
目前,我正在尝试通过 libsqlite 执行 FTS5 查询,并且需要将查询限制为特定列。在 FTS4 中,这可以通过以下方式实现:
SELECT foo, bar FROM tableName WHERE columnName MATCH ?
然后将搜索字符串绑定到语句。但是,对于 FTS5,MATCH 运算符的 LHS 必须是 FTS 表名本身,并且列名必须是查询的一部分:
SELECT foo, bar FROM tableName WHERE tableName MATCH 'columnName:' || ?.
当binded 字符串是单个短语时,此方法有效。但是,请考虑搜索文本 this is great。然后查询变为:
SELECT foo, bar FROM tableName WHERE tableName MATCH 'columnName:pizza is great';
只有pizza 被限制为columnName,但短语的其余部分与所有列匹配。
我该如何解决这个问题?
【问题讨论】:
-
this is great不是一个词组,而是三个词组。 -
CL.,谢谢,编辑称它为“搜索文本”
-
您希望搜索文本是一个词组还是三个词组?
-
三个短语,但结果应限制在特定列。