Implementation of PostgreSQL Full Text Search for django 1.7
Project description
=============
django-pg-fts
=============
Implementation PostgeSQL for Full Text Search for django 1.7, taking advantage of new features Migrations and Custom Lookups.
Features:
- FieldLookup's search, isearch, tsquery
- Ranking support with normalization, and weights using annotations
- Migrations classes to help create and remove index's, support for 'gin' or 'gist'
- Migrations classes to help create and remove of trigger's
- Multiple dictionaries support with trigger and FieldLookup's
- Support for python 2.7, 3.3 and 3.4
With multiple dictionary support, index and trigger migrations
How it works
------------
For a existing model::
class Article(models.Model):
title = models.CharField(max_length=255)
article = models.TextField()
You want to have full text search in fields title and article, and make give weight to title of 'A'.
Import TSVectorField::
from pg_fts.fields import TSVectorField
Add to existing TSVectorField to model and tell the fields that you want to index and the dictionary::
fts = TSVectorField(fields=(('title', 'A'), 'article'), dictionary='english')
Create migrations file::
python manage.py makemigrations article
Open the new created migration and import CreateFTSIndexOperation, CreateFTSTriggerOperation, UpdateVectorOperation::
from pg_fts.migrations import (CreateFTSIndexOperation, CreateFTSTriggerOperation,
UpdateVectorOperation)
And add to the end of operations::
# update vector for already existing data
UpdateVectorOperation(
name='Article',
field='fts',
),
# create trigger for automatic insert and update vector
CreateFTSTriggerOperation(
name='Article',
field='fts'
),
# create gin index for vector
CreateFTSIndexOperation(
name='Article',
field='fts',
index='gin'
)
Make the changes to your database::
python manage.py migrate article
Now you have a full text search performance with a trigger that checks any changes in the tracked fields and updates vector field.
You can search will match all words:
>>> Article.objects.filter(fts__search='waz up')
Will result in sql something like:
.. code-block:: sql
tsvector @@ to_tsquery('english', 'waz & up')
Or isearch will match some words:
>>> Article.objects.filter(fts__isearch='waz up')
Will result in sql something like:
.. code-block:: sql
tsvector @@ to_tsquery('english', 'waz | up')
But you can make a raw tsquery:
>>> Article.objects.filter(fts__tsquery='waz & !up')
Will result in sql something like:
.. code-block:: sql
tsvector @@ to_tsquery('english', 'waz & !up')
And also rank the results with normalization and order:
>>> from pg_fts.ranks import FTSRank
>>> Article.objects.filter(
rank=FTSRank(fts_search='waz up', normalization=[1,3])).order_by('-rank')
For multiple dictionaries and more advanced options, check the `documentation <http://django-pg-fts.readthedocs.org/>`_.
Documentation
-------------
Documentation available in `Read The Docs django-pg-fts.readthedocs.org <http://django-pg-fts.readthedocs.org/>`_
Installation
------------
Clone from GitHub::
git clone git://github.com/dvdmgl/django-pg-fts.git django-pg-fts
You should run the tests::
python runtests.py
Or running tox for py27, py33, py34::
tox
Install using pip from github::
pip install git+https://github.com/dvdmgl/django-pg-fts
Or using setup.py::
python setup.py
django-pg-fts
=============
Implementation PostgeSQL for Full Text Search for django 1.7, taking advantage of new features Migrations and Custom Lookups.
Features:
- FieldLookup's search, isearch, tsquery
- Ranking support with normalization, and weights using annotations
- Migrations classes to help create and remove index's, support for 'gin' or 'gist'
- Migrations classes to help create and remove of trigger's
- Multiple dictionaries support with trigger and FieldLookup's
- Support for python 2.7, 3.3 and 3.4
With multiple dictionary support, index and trigger migrations
How it works
------------
For a existing model::
class Article(models.Model):
title = models.CharField(max_length=255)
article = models.TextField()
You want to have full text search in fields title and article, and make give weight to title of 'A'.
Import TSVectorField::
from pg_fts.fields import TSVectorField
Add to existing TSVectorField to model and tell the fields that you want to index and the dictionary::
fts = TSVectorField(fields=(('title', 'A'), 'article'), dictionary='english')
Create migrations file::
python manage.py makemigrations article
Open the new created migration and import CreateFTSIndexOperation, CreateFTSTriggerOperation, UpdateVectorOperation::
from pg_fts.migrations import (CreateFTSIndexOperation, CreateFTSTriggerOperation,
UpdateVectorOperation)
And add to the end of operations::
# update vector for already existing data
UpdateVectorOperation(
name='Article',
field='fts',
),
# create trigger for automatic insert and update vector
CreateFTSTriggerOperation(
name='Article',
field='fts'
),
# create gin index for vector
CreateFTSIndexOperation(
name='Article',
field='fts',
index='gin'
)
Make the changes to your database::
python manage.py migrate article
Now you have a full text search performance with a trigger that checks any changes in the tracked fields and updates vector field.
You can search will match all words:
>>> Article.objects.filter(fts__search='waz up')
Will result in sql something like:
.. code-block:: sql
tsvector @@ to_tsquery('english', 'waz & up')
Or isearch will match some words:
>>> Article.objects.filter(fts__isearch='waz up')
Will result in sql something like:
.. code-block:: sql
tsvector @@ to_tsquery('english', 'waz | up')
But you can make a raw tsquery:
>>> Article.objects.filter(fts__tsquery='waz & !up')
Will result in sql something like:
.. code-block:: sql
tsvector @@ to_tsquery('english', 'waz & !up')
And also rank the results with normalization and order:
>>> from pg_fts.ranks import FTSRank
>>> Article.objects.filter(
rank=FTSRank(fts_search='waz up', normalization=[1,3])).order_by('-rank')
For multiple dictionaries and more advanced options, check the `documentation <http://django-pg-fts.readthedocs.org/>`_.
Documentation
-------------
Documentation available in `Read The Docs django-pg-fts.readthedocs.org <http://django-pg-fts.readthedocs.org/>`_
Installation
------------
Clone from GitHub::
git clone git://github.com/dvdmgl/django-pg-fts.git django-pg-fts
You should run the tests::
python runtests.py
Or running tox for py27, py33, py34::
tox
Install using pip from github::
pip install git+https://github.com/dvdmgl/django-pg-fts
Or using setup.py::
python setup.py
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
django-pg_fts-0.1.1.tar.gz
(28.4 kB
view details)
Built Distribution
File details
Details for the file django-pg_fts-0.1.1.tar.gz
.
File metadata
- Download URL: django-pg_fts-0.1.1.tar.gz
- Upload date:
- Size: 28.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8bd1df25e7006ac7faf41d68507384044a8cc6b6ed4a9e119d32c0a16dbc73cc |
|
MD5 | 92344d3fdd50da5b9c34e3606be3d0cf |
|
BLAKE2b-256 | fa14ad2ff4ac3980f4a61daf4b15b7d5f498c5e228267f2fcb3e5d558df3032c |
File details
Details for the file django_pg_fts-0.1.1-py2.py3-none-any.whl
.
File metadata
- Download URL: django_pg_fts-0.1.1-py2.py3-none-any.whl
- Upload date:
- Size: 14.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e7249b405930dd04b65633dfce4e0aaae28875172df2dc83c5506451e3d81114 |
|
MD5 | 28e80aea7dff276b45ed3f8eb3fd6529 |
|
BLAKE2b-256 | 9e38bb732ae4377709d8728e02454010af00a099830a5a055d3b2608d10b8da3 |