跳转到主要内容

使用Datasette在多个SQLite数据库表的内容上构建搜索索引,并对它进行分面搜索

项目描述

dogsheep-beta

PyPI Changelog Tests License

使用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这样的单词将匹配包含runsrunning的文档。

如果您不想使用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-latitudedata-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 (13.5 kB 查看哈希值)

上传时间

构建分发

dogsheep_beta-0.10.2-py3-none-any.whl (11.1 kB 查看哈希值)

上传时间 Python 3

支持者