使用Datasette在多个SQLite数据库表的内容上构建搜索索引,并对它进行分面搜索
项目描述
dogsheep-beta
使用Datasette在多个SQLite数据库表的内容上构建搜索索引,并对它进行分面搜索
示例
此插件的实时示例运行在 https://datasette.io/-/beta - 使用 此YAML文件 配置。
有关此示例如何工作的更多信息,请参阅 在datasette.io上构建搜索引擎。
安装
按照如下方式安装此工具
$ pip install dogsheep-beta
使用
使用dogsheep-beta
命令行工具运行索引器
$ dogsheep-beta index dogsheep.db config.yml
config.yml
文件包含应索引的数据库和文档类型的详细信息
twitter.db:
tweets:
sql: |-
select
tweets.id as key,
'Tweet by @' || users.screen_name as title,
tweets.created_at as timestamp,
tweets.full_text as search_1
from tweets join users on tweets.user = users.id
users:
sql: |-
select
id as key,
name || ' @' || screen_name as title,
created_at as timestamp,
description as search_1
from users
这将创建一个包含来自这些SQL查询的数据的search_index
表,位于dogsheep.db
数据库中。
默认情况下,此工具创建的搜索索引将配置为Porter词干提取。这意味着搜索像run
这样的单词将匹配包含runs
或running
的文档。
如果您不想使用Porter词干提取,请使用--tokenize none
选项
$ dogsheep-beta index dogsheep.db config.yml --tokenize none
您还可以在此处传递其他SQLite tokenize参数,请参阅 SQLite FTS tokenizers文档。
列
我们的查询可以返回的列有
key
- 该类型内的唯一(主)键title
- 项目的标题timestamp
- ISO8601时间戳,例如2020-09-02T21:00:21
search_1
- 要包含在搜索索引中的较大文本块category
- 整数分类ID,见下文is_public
- 整数(0或1,如果未设置,默认为0)指定此是否为公共的
公共记录是您公开的推文、博客文章和GitHub提交等。
分类
索引项可以分配一个类别。类别是整数,对应于categories
表中的记录,默认包含以下内容
id | name |
---|---|
1 | created |
2 | saved |
3 | received |
created
是针对由Dogsheep实例所有者创建的项目。
saved
是针对他们保存、点赞或收藏的项目。
received
是针对其他人专门发送给他们的项目 - 例如,传入的电子邮件或直接消息。
Datasette插件
运行datasette install dogsheep-beta
(或在同一环境中使用pip install dogsheep-beta
)来安装Dogsheep Beta Datasette插件。
安装后,将提供一个自定义搜索界面,地址为/-/beta
。您可以使用此界面执行搜索。
Datasette插件有一些配置选项。您可以通过向您的metadata.json
配置文件添加以下内容来设置这些选项
{
"plugins": {
"dogsheep-beta": {
"database": "beta",
"config_file": "dogsheep-beta.yml",
"template_debug": true
}
}
}
插件的配置设置如下
database
- 包含您的搜索索引的数据库文件。如果文件是beta.db
,则应将database
设置为beta
。config_file
- 包含您的Dogsheep Beta配置的YAML文件。template_debug
- 将此设置为true
,如果自定义模板中出现错误,将启用调试输出,请参阅以下内容。
自定义结果显示
每个索引项类型都可以在config.yml
文件中定义自定义显示HTML。它可以这样做,使用包含Jinja模板片段的display
键,以及可选的包含执行以获取要显示的数据的额外SQL的display_sql
键。
以下是如何为推文定义自定义显示模板的示例
twitter.db:
tweets:
sql: |-
select
tweets.id as key,
'Tweet by @' || users.screen_name as title,
tweets.created_at as timestamp,
tweets.full_text as search_1
from tweets join users on tweets.user = users.id
display: |-
<p>{{ title }} - tweeted at {{ timestamp }}</p>
<blockquote>{{ search_1 }}</blockquote>
此示例重新使用在运行索引查询时存储在search_index
表中的值。
要加载额外的值以在模板中显示,请使用类似以下的display_sql
查询
twitter.db:
tweets:
sql: |-
select
tweets.id as key,
'Tweet by @' || users.screen_name as title,
tweets.created_at as timestamp,
tweets.full_text as search_1
from tweets join users on tweets.user = users.id
display_sql: |-
select
users.screen_name,
tweets.full_text,
tweets.created_at
from
tweets join users on tweets.user = users.id
where
tweets.id = :key
display: |-
<p>{{ display.screen_name }} - tweeted at {{ display.created_at }}</p>
<blockquote>{{ display.full_text }}</blockquote>
display_sql
查询将为每个搜索结果执行,将search_index
表中的键值作为:key
参数传递,并将用户的搜索词作为:q
参数传递。
这是因为在SQLite中许多小查询都是高效的。
如果在渲染模板时发生错误,则搜索结果页面将返回500错误。您可以使用上面描述的template_debug
配置设置来代替输出发生错误的搜索结果项的调试信息。
显示地图
此插件最终将包含一些用于渲染有趣内容的快捷方式。
第一个可用的快捷方式是用于显示地图。让您的自定义内容输出如下
<div
data-map-latitude="{{ display.latitude }}"
data-map-longitude="{{ display.longitude }}"
style="display: none; float: right; width: 250px; height: 200px; background-color: #ccc;"
></div>
页面上的JavaScript将寻找任何具有data-map-latitude
和data-map-longitude
的元素,如果找到任何,将加载Leaflet并将这些元素转换为以该位置为中心的地图。默认缩放级别为12,或者您可以设置一个data-map-zoom
属性来自定义此。
开发
要本地设置此插件,首先检出代码。然后创建一个新的虚拟环境
cd dogsheep-beta
python3 -mvenv venv
source venv/bin/activate
或者如果您正在使用pipenv
pipenv shell
现在安装依赖项和测试
pip install -e '.[test]'
要运行测试
pytest
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪一个,请了解更多关于 安装包 的信息。
源分发
构建分发
dogsheep-beta-0.10.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 15aebf3a57c7f6369f2f6032fcae5af5fcf15a81eab42e35d537667c1685f92e |
|
MD5 | 7b4b2d9bd9114ac547a873f5463ecb1b |
|
BLAKE2b-256 | 4cb95a8f7f1c57de95c334c837ac649684bb785e6882b5aa2a9ddb74c0c770f5 |
dogsheep_beta-0.10.2-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 79c2ca4895a8fe479c0957dd7764269c00d414f8171750d7e420ce56ab4ce4b3 |
|
MD5 | 45e9ed8e752c4cd55292b984fde8986e |
|
BLAKE2b-256 | 2de796379456478dbc6236270f821f79a8ec9959e5dc57cf397ed7d8bfdf33db |