You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite FTS查询:如何仅返回包含匹配关键词的单行文本

SQLite提取FTS匹配结果中的目标行

你的FTS查询能返回包含关键词的整个body内容,但body里可能有多段文本,你需要的是仅提取包含匹配关键词的那一段。

用递归CTE拆分筛选

SQLite没有现成的按行拆分字符串的工具,但可以用递归公共表表达式(CTE)实现。假设段落是用换行符\n分隔的,直接用下面的查询:

WITH split_lines AS (
  -- 先拆分第一行
  SELECT
    SUBSTR(body, 1, INSTR(body || '\n', '\n') - 1) AS line,
    SUBSTR(body, INSTR(body || '\n', '\n') + 1) AS remaining
  FROM my_table
  WHERE body MATCH 'adipiscing'
  
  UNION ALL
  
  -- 递归拆分剩下的行
  SELECT
    SUBSTR(remaining, 1, INSTR(remaining || '\n', '\n') - 1) AS line,
    SUBSTR(remaining, INSTR(remaining || '\n', '\n') + 1) AS remaining
  FROM split_lines
  WHERE remaining != ''
)
SELECT line
FROM split_lines
WHERE line MATCH 'adipiscing';

这个逻辑是先把每个匹配到的body拆成单独的行,再从中筛选出包含关键词的行。如果你的段落分隔符是\r\n(Windows换行),把所有'\n'换成'\r\n'就行。如果同一个body有多段匹配,这个查询会返回所有匹配段,不需要的话加个LIMIT 1即可。

自定义函数(可选)

如果你的环境允许扩展SQLite,可以自己写个函数来提取目标行。比如用Python扩展的话,函数逻辑就是把body按换行拆成列表,遍历找包含关键词的行返回。这种方法更灵活,但需要依赖外部扩展支持。

内容的提问来源于stack exchange,提问作者425nesp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:21:08