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
Product
和 Name
- 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 - 对多个表进行全文搜索的主要内容,如果未能解决你的问题,请参考以下文章