Wagtail CMS的PostgreSQL全文搜索后端
wagtail-pg-search-backend的Python项目详细描述
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 search docs。
已知限制
- SearchField.partial_match行为未实现。
- 由于postgresql的限制,SearchField.boost只是部分 受人尊敬的。它被改变了,所以只能有4个不同的助推器。 如果你定义了4个或更少不同的助推器, 一切都会非常准确。 但是,如果定义的范围超过 4种不同的助推器。也就是说,它会起作用,大致相同。
- SearchField.es_extra未处理,因为它是特定的 去ElasticSearch。
- 在限制为特定字段时使用SearchQuerySet.search只是 支持数据库字段,而不是方法。
性能
PostgreSQL搜索后端已经在一些小型的 中小型网站及其性能 关于弹性搜索。
使用postgresql>;=9.5时,速度有了一些明显的提高。
要添加的功能
一旦该项目与wagtail合并,这些功能将非常棒:
- 每对象增压
- 刻面
- 自动完成(也许它应该取代部分搜索?)
- 拼写建议
开发
安装软件包和开发要求:
pip install -e . -r requirements-dev.txt
创建迁移
首先创建数据库:
createdb -Upostgres wagtail_pgsearchbackend
然后使用测试设置调用makemigrations:
django-admin makemigrations --settings=tests.settings
测试
为当前环境的python版本运行unittests 摇尾跑:
make unittests
要检查代码的样式错误,请运行:
make flaketest
要组合这些任务,请运行:
make
对所有受支持的python版本运行unittest 摇尾跑:
tox
tox运行还将创建一个包含结果的覆盖率报告 所有的跑步。此报表位于htmlcov/index.html。
要按名称运行单个测试,请使用runtests.py脚本并给出 虚线路径测试模块、类或方法 想要测试例如:
./runtests.py tests.test_module.TestClass.test_method