android sqlite fts4,SQLite FTS4使用首选语言

本文探讨如何使用SQLite的FTS4模块进行高效搜索,并结合不同语言的查询结果,同时避免重复项。作者面临的问题是,希望在不执行额外查询的情况下,从两个语言的搜索结果中获取唯一ID的并集。尝试了WITH子句和递归CTE,但未能达到预期效果。讨论中涉及了如何优化这样的多语言搜索查询,以减少查询次数并提高性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一个使用FTS4模块生成的sqlite表.每个条目至少列出两次使用不同的语言,但仍然共享一个唯一的ID(int列,未编入索引).

这是我想要做的:

我想用首选语言查找术语.我想将结果与使用其他语言查找同一个术语结合起来.

但是对于第二次查找,我想忽略我在第一次查找期间找到的所有条目(由它们的ID标识).所以基本上我想这样做:

WITH term_search1 AS (

SELECT *

FROM myFts

WHERE myFts MATCH 'term'

AND languageId = 1)

SELECT *

FROM term_search1

UNION

SELECT *

FROM myFts

WHERE myFts MATCH 'term'

AND languageId = 2

AND id NOT IN (SELECT id FROM term_search1)

这里的问题是,term_seach1查询将被执行两次.有没有办法实现我的结果呢?将其限制为2个查询(而不是3个)的任何解决方案都会很棒.

我也尝试过使用递归查询,例如:

WITH RECURSIVE term_search1 AS (

SELECT *

FROM myFts

WHERE myFts MATCH 'term'

AND languageId = 1

UNION ALL

SELECT m.*

FROM myFts m LEFT OUTER JOIN term_search1 t ON (m.id = t.id)

WHERE myFts MATCH 'term'

AND m.languageId = 2

AND t.id IS NULL

)

SELECT * FROM term_search1

这既不起作用.显然他刚刚为languageId = 2执行了两次查找(这可能是一个错误吗?).

提前致谢 :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值