Чтобы уточнить на ответе celopes , способ работы django-haystack заключается в том, что вы можете определить визуализированный «документ» для каждой модели.
Скажем, у вас есть несколько моделей ...
class Teacher(mdoels.Model):
name = models.CharFiel(max_length=100)
class Course(models.Model):
name = models.CharField(max_length=100)
teacher = models.ForeignKey(Teacher)
class Student(models.Model):
name = models.CharFiel(max_length=100)
grade = models.IntegerField()
classes = models.ManyToManyField(Course, related_name='students')
class Grade(models.Model):
value = models.CharField(max_length=1)
course = models.ForeignKey(Course)
student = models.ForeignKey(Student, related_name='grades')
В стоге сена вы определяете шаблон для рендеринга курса ...
{% comment %} In this context 'object' represents a Course model {% endcomment %}
<h1>{{ object.name }}</h1>
<h2>{{ object.teacher.name }}</h2>
<ul>
{% for student in object.students %}
<li>{{ student.name }}</li>
{% endfor %}
</ul>
Таким образом, вы определяете не только «документ», представляющий каждую модель курса, но и указываете приоритет для фрагментов информации, основанных на разметке HTML (h1 важнее, чем h2, который важнее, чем li).
С точки зрения накладных расходов эти «документы» отображаются с помощью команды управления стогом сена ...
\> manage.py reindex
Таким образом, вы можете перезапустить задание cron / Scheduler для переиндексации с любым интервалом, который вам удобен.
Solr также включает в себя некоторые аккуратные вещи, такие как предложение правописания, и все эти аккуратные вещи. Сначала я попробовал Whoosh со стогом сена, но мне не понравилось, что он делал смешные вещи с самыми странными черточками. Haystack + Solr - хороший комбо.