Datasette 项目中的全文搜索功能详解

Datasette 项目中的全文搜索功能详解

全文搜索概述

Datasette 利用 SQLite 内置的强大全文搜索机制,为用户提供了便捷的数据检索功能。当底层数据库表配置了全文搜索索引后,Datasette 会自动检测并在表页面显示搜索界面。

SQLite 的全文搜索支持三种版本:FTS3、FTS4 和 FTS5。FTS5 是最先进的版本,但可能不适用于所有 Python 环境中的 SQLite 版本。如果无法确定 FTS5 是否可用,建议使用 FTS4。

基本搜索功能

在 Datasette 中,可以通过 ?_search=TERMS 查询字符串参数对支持全文搜索的表进行查询。这个搜索会针对索引中包含的所有列内容执行。

SQLite 全文搜索支持通配符功能,这使得实现前缀自动补全变得非常简单。例如:

/dbname/tablename/?_search=rob*

这将返回所有包含至少一个以 "rob" 开头的单词的记录。

高级搜索功能

SQLite 全文搜索支持多种高级查询语法,包括 ANDORNOTNEAR 等操作符。默认情况下,Datasette 会禁用这些功能以避免对不了解这些功能的用户造成困惑。

要使用这些高级查询功能,可以在表页面查询字符串中添加 &_searchmode=raw 参数。如果想为特定表默认启用这些操作符,可以在该表的元数据配置中添加 "searchmode": "raw"

表和视图的全文搜索配置

当表使用 CREATE VIRTUAL TABLE 命令的 content= 参数设置了对应的 FTS 表时,Datasette 会自动检测并在该表的页面添加搜索界面。

也可以通过查询字符串参数或元数据手动配置哪个表应该用于全文搜索。可以为特定表设置关联的 FTS 表,也可以为视图设置 - 这样该 SQL 视图的页面将提供搜索选项。

自定义 SQL 中的搜索

可以在自定义 SQL 查询中包含全文搜索结果。SQLite 搜索的一般模式是将搜索作为返回 rowid 值的子查询运行,然后在查询的其他部分中包含这些 rowid。

要查看基本搜索的语法,可以在表页面上运行搜索,然后点击"查看和编辑 SQL"查看底层 SQL。

启用 SQLite 表的全文搜索

Datasette 利用了 SQLite 中的外部内容机制,允许全文搜索虚拟表与另一个 SQLite 表的内容相关联。要为表设置全文搜索,需要做两件事:

  1. 创建一个与表关联的新 FTS 虚拟表
  2. 用想要搜索的数据填充该 FTS 表

使用 sqlite-utils 配置 FTS

sqlite-utils 是一个用于操作 SQLite 数据库的 CLI 工具和 Python 库。可以使用它来配置 FTS 搜索。

使用 csvs-to-sqlite 配置 FTS

如果数据最初在 CSV 文件中,可以使用 csvs-to-sqlite 工具将该文件转换为 SQLite 数据库并在特定列上启用全文搜索。

手动配置 FTS

虽然推荐使用 sqlite-utils,但也可以手动创建 SQLite 全文搜索表。要为名为 items 的表启用针对 namedescription 列的全文搜索,可以运行以下 SQL 来创建一个新的 items_fts FTS 虚拟表:

CREATE VIRTUAL TABLE "items_fts" USING FTS4 (
    name,
    description,
    content="items"
);

创建表后,还需要用想要搜索的数据填充它:

INSERT INTO "items_fts" (rowid, name, description)
    SELECT rowid, name, description FROM items;

如果表有外键列引用其他表,可以使用连接将这些数据包含在全文搜索索引中。

总结

Datasette 的全文搜索功能为用户提供了强大的数据检索能力。通过合理配置,可以实现从简单搜索到复杂查询的各种需求。无论是通过工具自动配置还是手动设置,都能灵活地满足不同场景下的搜索需求。

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣正青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值