如何在 sqlite 中查询一个 fts 表以查找一个匹配的列和另一个不匹配特定查询的列?

Posted

技术标签:

【中文标题】如何在 sqlite 中查询一个 fts 表以查找一个匹配的列和另一个不匹配特定查询的列?【英文标题】:How do I query an fts table in sqlite for one column matching and another NOT matching a particular query? 【发布时间】:2014-02-17 05:08:03 【问题描述】:

我有一个建议表 (FTS4),用于为 android 操作栏搜索中的查询提供建议。我需要在表中查询其中一列(suggest_text_1)与查询文本匹配而另一列(data_type)不匹配特定查询的建议,例如2

我当前的选择文本是 table_suggestions MATCH ?,我正在尝试使用以下选择参数文本替换 '?' - suggest_text_1:*S1* AND data_type:NOT 2

问题是,即使数据存在,该表也为我提供了任何建议。能否指出我执行此查询的正确方法?

【问题讨论】:

【参考方案1】:

Android 中的 SQLite 库通常不会使用增强的查询语法进行编译,因此您必须使用 standard query syntax 就像 suggest_text_1:S1* data_type:-2 之类的东西。 在 SQL 中,这将是:

SELECT docid,
       suggest_text_1
FROM MyTable
WHERE MyTable MATCH 'suggest_text_1:' || ? || '* data_type:-' || ?

FTS 仅支持前缀查询;你不能在单词的开头使用*

【讨论】:

是的,我已经知道了,但我没有更新我的答案。无论如何,感谢您的回答。 :-)

以上是关于如何在 sqlite 中查询一个 fts 表以查找一个匹配的列和另一个不匹配特定查询的列?的主要内容,如果未能解决你的问题,请参考以下文章

如何查找 FTS5 和 MATCH 之间的记录?

需要调整我的 FTS4 SQLite 查询

连接表:一个是普通表,另一个是 FTS 虚拟表

带有 FTS4 表的 sqlite3:查询返回错误的行

Sqlite FTS5 标点符号在选择查询中不起作用

如何在 SQLite 中使用 FTS 和 Monotouch for iOS