pip install django-haystack
pip install elasticsearch
pip install whoosh
python
INSTALLED_APPS = [
...
'haystack',
...
]
python
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
},
}
python
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
},
}
python
from django.db import models
from django.utils import timezone
from haystack import indexes
class Article(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
created_at = models.DateTimeField(default=timezone.now)
class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
def get_model(self):
return Article
def index_queryset(self, using=None):
return self.get_model().objects.all()
python
from django.shortcuts import render
from haystack.query import SearchQuerySet
def search(request):
q = request.GET.get('q', '')
articles = SearchQuerySet().filter(text=q)
return render(request, 'search.html', {'articles': articles, 'query': q})
html
{% for article in articles %}
<h2>{{ article.object.title }}</h2>
<p>{{ article.object.content }}</p>
<hr>
{% empty %}
<p>No articles found.</p>
{% endfor %}
python
from django.urls import path
from .views import search
urlpatterns = [
path('search/', search, name='search'),
]