Package: django-pg-fts
=============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.4With multiple dictionary support, index and trigger migrationsHow 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 TSVectorFieldAdd 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 articleOpen 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 dataUpdateVectorOperation(name='Article',field='fts',),# create trigger for automatic insert and update vectorCreateFTSTriggerOperation(name='Article',field='fts'),# create gin index for vectorCreateFTSIndexOperation(name='Article',field='fts',index='gin')Make the changes to your database::python manage.py migrate articleNow 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:: sqltsvector @@ 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:: sqltsvector @@ 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:: sqltsvector @@ 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-ftsYou should run the tests::python runtests.pyOr running tox for py27, py33, py34::toxInstall using pip from github::pip install git+https://github.com/dvdmgl/django-pg-ftsOr using setup.py::python setup.py