【问题标题】:SQLITE Perform Reverse full text searchSQLITE 执行反向全文搜索
【发布时间】:2021-05-17 01:45:56
【问题描述】:

假设我们有两张表,一张名为tags,另一张名为texts,如下所示:

tags表:

id name
1 T1
2 T2
3 T3
4 T4

Texts表:

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

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

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' )

还有其他方法可以让它发挥作用吗? 谢谢

【问题讨论】:

  • 这是一个非常简单的要求,显而易见的解决方案是连接和运算符 LIKE。为什么你认为它不实用
  • @forpas 如果我有一张tags 的长桌,请问我该怎么做?我认为LIKE 不适用于连接。是吗?
  • 当然可以。看我的回答。

标签: sqlite full-text-search sql-like


【解决方案1】:

您可以在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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多