Для интеграции Sphinx (движка для полнотекстового поиска) и Django существует приложение django-sphinx.
Это приложение автоматически генерирует конфигурационный файл (на основе которого строятся поисковые индексы), позволяет делать полнотекстовый поиск по моделям или по нескольким индексам одновременно (получая queryset-подобные объекты).
Управление свойствами индексов, весами атрибутов и тому подобным ведётся прямо из модели:
На основе этих данных manage-команда ./manage.py generate_sphinx_config составляет конфигурацию индексов.
К сожалению, проект развивается автором не очень интенсивно, но на github.com существует некоторое количество форков, решающих ряд проблем, среди которых изменившиеся в Django 1.3 настройки баз данных (поддержка нескольких БД) и поиск по нескольким индексам.
Для того, чтобы поиск одновременно по нескольким индексам позволял оперировать с результатами как с ORM-объектами, а не идентификаторами записей, необходимо проследить, чтобы выполнялись следующие два условия:
Наш форк django-sphinx можно найти тут
Это приложение автоматически генерирует конфигурационный файл (на основе которого строятся поисковые индексы), позволяет делать полнотекстовый поиск по моделям или по нескольким индексам одновременно (получая queryset-подобные объекты).
Управление свойствами индексов, весами атрибутов и тому подобным ведётся прямо из модели:
class MyModel(models.Model):
...
search = SphinxSearch(weights={ 'name': 100, 'description': 10, 'tags': 80}, mode='SPH_MATCH_ALL', rankmode='SPH_RANK_NONE')
...
На основе этих данных manage-команда ./manage.py generate_sphinx_config
К сожалению, проект развивается автором не очень интенсивно, но на github.com существует некоторое количество форков, решающих ряд проблем, среди которых изменившиеся в Django 1.3 настройки баз данных (поддержка нескольких БД) и поиск по нескольким индексам.
Для того, чтобы поиск одновременно по нескольким индексам позволял оперировать с результатами как с ORM-объектами, а не идентификаторами записей, необходимо проследить, чтобы выполнялись следующие два условия:
- В запросах, на основе которых строятся индексы (sql_query в секциях source конфига), в секции SELECT должно присутствовать <число> AS content_type, то есть должна быть связь с типом контента (для того, чтобы django-sphinx смог понять, какой модели принадлежит результат).
- В той же секции должно присутствовать объявление sql_attr_uint = content_type.
Наш форк django-sphinx можно найти тут
Комментариев нет:
Отправка комментария