SQLite FTS3 - 对多个表进行全文搜索

Posted

技术标签:

【中文标题】SQLite FTS3 - 对多个表进行全文搜索【英文标题】:SQLite FTS3 - Full-Text Search over multiple tables 【发布时间】:2014-10-09 10:41:28 【问题描述】:

我的brand_names 表中有一个brand_name 列,我的product_names 表中有一个product_name 列。

目前,我有两个单独的 SELECT(一个在 brand_names.brand_name 上,一个在 product_names.product_name 上),我使用 UNION 将两个结果集“或”在一起。但是,当搜索“SomeBrandName Some Product Name”时,即使存在这样的产品,我的 SQL 也会返回零个结果(这是因为术语 - SomeBrandName Some ProductName - don' t all 出现在 brand_names.brand_name 中,但它们没有all 出现在 product_names.product_name)。

所以我需要帮助来计算 SQLite / FTS3 等价物...

SELECT (brand_names.brand_name || ' ' || product_names.product_name) AS brand_and_product_name FROM brand_names, product_names WHERE brand_and_product_name MATCH 'SomeBrandName Some Product Name'

我需要实现的实际 SQLite / FTS3 SQL 是什么?

在研究方面,我已经阅读了SQLite FTS3 guide,但它没有提到多个表。

我还看到了一个更高级的similar question,因此对于我在这里尝试实现的简单搜索可能有点过头了。

【问题讨论】:

【参考方案1】:

只能在 FTS 索引中进行 FTS 搜索。

如果您想获得“品牌产品”的结果,您必须创建一个 FTS 表,在一行中包含这些词。 (要减少存储空间,请尝试在视图上使用 external content table。)

【讨论】:

谢谢!我现在已将brand_name 列移到与product_name 列相同的表中。你知道我如何对两列进行 FTS 查询吗? (在这里找不到任何帮助 - sqlite.org/fts3.html 您链接的 Thema 文档说 MATCH 可以采用表名而不是列名。【参考方案2】:

为此,您必须为您的两个表准备第一个虚拟表。 然后,您可以使用连接对它们应用索引搜索(FTS 搜索),就像使用简单表连接一样。

【讨论】:

以上是关于SQLite FTS3 - 对多个表进行全文搜索的主要内容,如果未能解决你的问题,请参考以下文章

SQLite第三课 源码编译错误以及解决

SQlite 全文搜索(FTS)?

SQLite3 FTS3/FTS4 匹配信息示例

对 SQLite 表和虚拟表的困惑

在 SQLite 中为全文搜索索引创建 SQL 触发器

如何增加 Sqlite FTS4 片段大小