Skip to content

rjauquet/django-searchable

Repository files navigation

Django Searchable

Easy full text search with Django and PostgreSQL. Sane defaults + auto creation of vector fields, indexes, and database triggers.

Example

Extend your model with the SearchableModel class, and use the SearchableTextField class to automatically setup full text search:

from django.db.models import TextField
from django_searchable.models import SearchableModel, SearchableTextField

class Blog(SearchableModel):
    author_name = TextField() # will NOT have FTS setup automatically
    title = SearchableTextField() # will have FTS setup automatically
    text = SearchableTextField() # will have FTS setup automatically

Then search away via the Blog manager:

# takes a string of space separated terms
results = Blog.objects.search('spiderman suits')

# or a list of terms
results = Blog.objects.search(['water', 'baskets', 'leaking'])

# or a SearchQuery object
from django.contrib.postgres.search import SearchQuery
query = ~SearchQuery('superman') & SearchQuery('batman')
results = Blog.objects.search(query)

.search adds a rank annotation and automatically filters and sorts the resulting queryset.

By default, .search will search through all SearchableTextField fields on the model, but you can specify any subset:

results = Blog.objects.search('who is venom', fields=['title'])

Contributing

pipenv install --dev
createuser -s -P test_user  # use 'password'
pipenv run ./manage.py test

About

Easy full text search with Django and PostgreSQL

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages