sqlite fts4在使用group by时不能使用偏移功能

Posted

技术标签:

【中文标题】sqlite fts4在使用group by时不能使用偏移功能【英文标题】:sqlite fts4 can not use offsets funtion when use group by 【发布时间】:2015-03-31 03:52:05 【问题描述】:

我有两张桌子: 表格1: fts 虚拟表

docid 长自动增加, 内容文本,(fts 列)

表 2: 元数据表

docid Long(table1 docid的外键), 用户名文本, 时间戳

sql: select table1.docid content, username, MAX(timestamp) as time, offsets(table1) from table1, table2 where content Match "a" AND table1.docid = table2.docid group by username order by timestamp desc limit 3;

这个sql不会执行,但是我删除“group by username”,它可以执行。为什么?

【问题讨论】:

对我有用,除非我删除 GROUP BY。 你找到解决办法了吗? 【参考方案1】:

offsets 函数仅适用于 FTS 表,但连接的结果不再是 FTS 表(取决于查询优化器如何决定执行连接)。

您必须改为分两步进行搜索:

SELECT docid,
       content,
       offsets,
       username,
       MAX(timestamp)
FROM (SELECT docid,
             content,
             offsets(table1) AS offsets
      FROM table1
      WHERE content MATCH 'a')
JOIN table2 USING (docid)
GROUP BY username
ORDER BY timestamp DESC
LIMIT 3;

【讨论】:

仍然出现无法在请求的上下文中使用函数偏移量的错误,我的sql是SELECT类型,MIN(subtype) as minSubtype, entity_id, aux_index, timestamp, content, offset FROM (SELECT docid, content , offsets(FtsIndexContact) as offset FROM FtsIndexContact WHERE content MATCH ?) JOIN FtsMetaContact USING(docid) WHERE type = 131075 AND status >= 0 GROUP BY aux_index ORDER BY talktime desc LIMIT 4;

以上是关于sqlite fts4在使用group by时不能使用偏移功能的主要内容,如果未能解决你的问题,请参考以下文章

在 SQLite 的 GROUP_CONCAT 函数中使用 ORDER BY 子句

group_concat sqlite 和 order by

需要调整我的 FTS4 SQLite 查询

如何增加 Sqlite FTS4 片段大小

FTS4 SQLITE 中的外部内容

Sqlite Android order by & group_concat