SQLITE 执行反向全文搜索

SQLITE Perform Reverse full text search

假设我们有两个 table,一个名为 tags,一个名为 texts,如下所示:

tags table:

id name
1 T1
2 T2
3 T3
4 T4

Texts table:

id text
1 Text includes T2
2 Text includes T4
3 Text
4 Text includes T2

我想搜索每个 Text 并将 Tags table 中的标签附加到每个文本。输出将是这样的:

tagId textId
2 1
2 4
4 3

I 就像遍历每个文本,然后遍历每个标签并使用 Like 语句检查该文本是否包含该标签。然而,这是不切实际的。另一种方法是使用 FTS 但我不太确定如何编写它的查询,因为例如这个查询只给我具有这些标签的文本

select *
  from texts_fts
 WHERE texts_fts MATCH ( select group_concat(tag, ' OR ')
                              from keywords
                             group by 'x' )

是否有任何其他方法可以让它发挥作用? 谢谢

您可以在 ON 子句中使用联接和运算符 LIKE 来实现:

SELECT tg.id tagId, tx.id textId
FROM tags tg INNER JOIN texts tx
ON tx.text LIKE '%' || tg.name || '%'

INSTR():

SELECT tg.id tagId, tx.id textId
FROM tags tg INNER JOIN texts tx
ON INSTR(tx.text, tg.name)

参见demo