Skip to main content

PostgreSQL full text search backend for Wagtail CMS

Project description

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

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.

Source Distribution

wagtail-pg-search-backend-1.3.1.tar.gz (15.0 kB view details)

Uploaded Source

Built Distribution

wagtail_pg_search_backend-1.3.1-py2.py3-none-any.whl (14.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file wagtail-pg-search-backend-1.3.1.tar.gz.

File metadata

File hashes

Hashes for wagtail-pg-search-backend-1.3.1.tar.gz
Algorithm Hash digest
SHA256 fcac84c32bf74304058b92a1e35bd8dabaca8ad4679fed0c4e8fa4d88c79a63a
MD5 1981f4f65c194769e974c377499b7ba7
BLAKE2b-256 7f703389f760333df895a4464ea3747cdf73475f6b81dbab1c07e20c04ea934a

See more details on using hashes here.

File details

Details for the file wagtail_pg_search_backend-1.3.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for wagtail_pg_search_backend-1.3.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 caa9f1754815df917af20acbb487f3b7840efa6d4fbc3499191b836f56fe09fd
MD5 b654366d7ec1027969b1ab30301184b0
BLAKE2b-256 fd0198a18310adae90f0544ef4240b4924e69e0d99fec448b4f193d6b2cd405f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page