【问题标题】:How to restrict entire FTS5 Query to a single column?如何将整个 FTS5 查询限制为单个列?
【发布时间】: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.,谢谢,编辑称它为“搜索文本”
  • 您希望搜索文本是一个词组还是三个词组?
  • 三个短语,但结果应限制在特定列。

标签: sql sqlite


【解决方案1】:

documentation 说:

单个短语 ... 可以通过在 FTS 表的指定列中添加前缀来限制匹配文本,方法是在列名后面加上冒号字符。

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

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

【讨论】:

  • 我最近又遇到了这个问题,发现在不知道搜索文本格式的情况下,这个解决方案并不可行。
猜你喜欢
  • 1970-01-01
  • 2020-12-09
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
  • 2010-10-01
  • 2011-02-17
相关资源
最近更新 更多