PostgreSQL full text search backend for Wagtail CMS
Project description
A PostgreSQL full text search backend for Wagtail CMS.
Installation
PostgreSQL full text search in Wagtail requires PostgreSQL >= 9.2 (noticable speed improvements are in place for PostgreSQL >= 9.5), Django >= 1.10 and Wagtail >= 1.8.
First, install the module using:
pip install wagtail-pg-search-backend
Then you’ll need to do a little bit of configuration.
Add the following to the project settings:
INSTALLED_APPS = [ ... 'wagtail_pgsearchbackend' ... ] WAGTAILSEARCH_BACKENDS = { 'default': { 'BACKEND': 'wagtail_pgsearchbackend.backend', 'SEARCH_CONFIG': 'english' } }
Then run migrations to add the required database table:
./manage.py migrate wagtail_pgsearchbackend
Configuration
The SEARCH_CONFIG key takes a text search configuration name. This controls the stemming, stopwords etc. used when searching and indexing the database. To get a list of the available config names use this query:
SELECT cfgname FROM pg_catalog.pg_ts_config
Usage
This backend implements the required methods to be compatible with most features mentioned in the the Wagtail search docs.
Known limitations
- SearchField.partial_match behaviour is not implemented.
- Due to a PostgreSQL limitation, SearchField.boost is only partially respected. It is changed so that there can only be 4 different boosts. If you define 4 or less different boosts, everything will be perfectly accurate. However, your search will be a little less accurate if you define more than 4 different boosts. That being said, it will work and be roughly the same.
- SearchField.es_extra is not handled because it is specific to ElasticSearch.
- Using SearchQuerySet.search while limiting to specific field(s) is only supported for database fields, not methods.
Performance
The PostgreSQL search backend has been tried and tested on a few small to medium sized website and its performance compares favorably to that of ElasticSearch.
Some noticeable speed improvements are in place when using PostgreSQL >= 9.5.
Features to add
These features would awesome to have once this project is merged with Wagtail:
- Per-object boosting
- Faceting
- Autocomplete (maybe it should replace partial search?)
- Spelling suggestions
Development
Install the package and dev requirements:
pip install -e . -r requirements-dev.txt
Creating migrations
First create a database:
createdb -Upostgres wagtail_pgsearchbackend
Then call makemigrations using the test settings:
django-admin makemigrations --settings=tests.settings
Testing
To run the unittests for the current environment’s Python version and Wagtail run:
make unittests
To check the code for style errors run:
make flaketest
To combine these tasks run:
make
To run the unittest against all supported versions of Python and Wagtail run:
tox
The tox run will also create a coverage report combining the results of all runs. This report is located in htmlcov/index.html.
To run individual tests by name use the runtests.py script and give the dotted path the the test module(s), class(es) or method(s) that you want to test e.g.:
./runtests.py tests.test_module.TestClass.test_method
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size wagtail_pg_search_backend-1.3.2-py2.py3-none-any.whl (14.8 kB) | File type Wheel | Python version py2.py3 | Upload date | Hashes View |
Filename, size wagtail-pg-search-backend-1.3.2.tar.gz (17.5 kB) | File type Source | Python version None | Upload date | Hashes View |
Hashes for wagtail_pg_search_backend-1.3.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ea35c908df83ffb581ac088b355d3e2977515a2d1ab50e98a01390d01fa2d573 |
|
MD5 | 3f1674c261917526364d8e90fd200a64 |
|
BLAKE2-256 | 207e1e67eec6a0acd83cbcf88eb91cf03ded2c8fd271f2b53100696b2939b1da |
Hashes for wagtail-pg-search-backend-1.3.2.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | afcd888c51b6c282ae13691e305cded93dbfbcd3c5bccc474eb6f4dbe4f188e6 |
|
MD5 | c4a39a59e4dd23a6128683b9af1263cb |
|
BLAKE2-256 | 855b76e80ecd6d1d3eec2b12d2ca90682a1d6cfec0c5e2d70a21043f7fd2bfc6 |