跳转到主要内容

Wagtail CMS的PostgreSQL全文搜索后端

项目描述

http://img.shields.io/travis/wagtail/wagtail-pg-search-backend/master.svg

Wagtail CMS 的 PostgreSQL 全文搜索引擎后端。

安装

Wagtail 中的 PostgreSQL 全文搜索需要 PostgreSQL >= 9.2(对 PostgreSQL >= 9.5 速度有显著提升),Django >= 1.10 和 Wagtail >= 1.8。

首先,使用以下命令安装模块:

pip install wagtail-pg-search-backend

然后,你需要进行一些配置。

将以下内容添加到项目设置中:

INSTALLED_APPS = [
    ...
    'wagtail_pgsearchbackend'
    ...
]

WAGTAILSEARCH_BACKENDS = {
    'default': {
        'BACKEND': 'wagtail_pgsearchbackend.backend',
        'SEARCH_CONFIG': 'english'
    }
}

然后运行迁移以添加所需的数据库表

./manage.py migrate wagtail_pgsearchbackend

配置

SEARCH_CONFIG” 键接受一个文本搜索配置名称。这控制了搜索和索引数据库时使用的词干、停用词等。要获取可用配置名称的列表,请使用此查询

SELECT cfgname FROM pg_catalog.pg_ts_config

用法

此后端实现了与《Wagtail 搜索文档》中提到的多数功能兼容所需的方法。

已知限制

  • SearchField.partial_match 行为未实现。

  • 由于 PostgreSQL 的限制,SearchField.boost 只部分受尊重。它被修改,使得只能有 4 个不同的权重。如果您定义了 4 个或更少的不同的权重,一切都将非常准确。然而,如果您定义了 4 个以上的不同权重,您的搜索将稍微不准确。但话虽如此,它仍然可以工作,并且大致相同。

  • SearchField.es_extra 由于它专属于 ElasticSearch 而未处理。

  • 在限制到特定字段时使用 SearchQuerySet.search 只支持数据库字段,而不是方法。

性能

PostgreSQL 搜索后端已经在几个小到中等规模的网站上进行了测试和验证,其性能与 ElasticSearch 相当。

当使用 PostgreSQL >= 9.5 时,有一些显著的速度提升。

要添加的功能

一旦此项目与 Wagtail 合并,以下功能将非常棒

  • 按对象提升

  • 分面搜索

  • 自动完成(也许它应该替换部分搜索?)

  • 拼写建议

开发

安装包和开发需求

pip install -e . -r requirements-dev.txt

创建迁移

首先创建一个数据库

createdb -Upostgres wagtail_pgsearchbackend

然后使用测试设置调用 makemigrations

django-admin makemigrations --settings=tests.settings

测试

要运行当前环境 Python 版本和 Wagtail 的 unittests,请运行

make unittests

要检查代码中的样式错误,请运行

make flaketest

要组合这些任务,请运行

make

要运行针对所有支持的 Python 和 Wagtail 版本的 unittests,请运行

tox

tox 运行还将创建一个覆盖率报告,该报告结合了所有运行的结果。此报告位于 htmlcov/index.html

要按名称运行单个测试,请使用 runtests.py 脚本,并提供您想要测试的测试模块、类或方法的点路径,例如

./runtests.py tests.test_module.TestClass.test_method

项目详情


下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源分布

wagtail-pg-search-backend-1.3.2.tar.gz (17.5 kB 查看哈希)

上传

构建分布

wagtail_pg_search_backend-1.3.2-py2.py3-none-any.whl (14.8 kB 查看哈希值)

上传时间 Python 2 Python 3

支持