Какие приложения / решения наиболее подходят для поиска по моделям в Django? - PullRequest
3 голосов
/ 22 октября 2009

У меня есть приложение Django, в котором большая часть поиска осуществляется с помощью внешних ключей. Например, если предположить, что учащийся, школа, штат и образовательная квалификация являются моделями Django, пользователь будет искать учеников, задавая критерии поиска, выбирая из списков школ, штатов, степеней, дипломов и т. Д. То есть поиск учащихся по сути ответьте на вопрос «Покажите учащихся, которые принадлежат к следующим школам, принадлежат к следующим штатам и имеют следующие степени / дипломы».

Мое приложение Django основано исключительно на базе данных - нет документов или веб-страниц для поиска.

В этом случае, когда поиск моделей Django ориентируется в основном на внешние ключи, которые имеет модель, какие поисковые приложения / решения являются наиболее подходящими? Те, на кого я смотрел, много говорят о полнотекстовом поиске, я могу ошибаться, но я не думаю, что это уместно в моем случае.

РЕДАКТИРОВАТЬ: - В настоящее время я ищу с использованием подхода Питера Херндона (http://www.slideshare.net/tpherndon/django-search-presentation). Но ожидается, что это будет сайт с большим трафиком, и я беспокоюсь о скорости и производительности.

Ответы [ 5 ]

2 голосов
/ 22 октября 2009

если ваш djangoapp является чисто драйвером базы данных, вам будет полезно выполнить поисковую заявку с complex-lookups-with-q-objects , потому что make-query (хорошо реализован) - эффективный способ поиска данных на БД под руководством ФК.

1 голос
/ 23 октября 2009

django-filter - это повторно используемое приложение Django, позволяющее пользователям фильтровать набор запросов динамически.

попробуй:)

0 голосов
/ 06 ноября 2009

Чтобы уточнить на ответе 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 - хороший комбо.

0 голосов
/ 05 ноября 2009

Если вы выполняете такой конкретный поиск по полю, который, как вам кажется, то ответом являются сложные запросы. Подождите, пока у вас действительно возникнут проблемы с производительностью, прежде чем беспокоиться о них. Получить много трафика гораздо сложнее, чем иметь дело с большим количеством трафика. Если вам нужно масштабировать это, то помните, что оборудование дешевое. Просто получите действительно хороший сервер баз данных, который хорошо настроен и имеет большое время кэширования.

Вы можете попробовать использовать такие инструменты, как sphinx, haystack и т. Д., Но они предназначены для поиска в стиле Google, а не для конкретных запросов, о которых вы говорите.

0 голосов
/ 22 октября 2009

Если у вас высокий трафик, задумывались ли вы о поиске по Solr / Haystack?

Haystack делает настройку поиска на основе Solr (Lucene) очень простой, и вам не нужно изменять ваши модели.

http://haystacksearch.org/

Вы даже можете начать с Woosh (непроизводственной поисковой системы для Haystack), а затем добавить Solr.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...