Форум сайта python.su
Задача: Полнотекстовый поиск по нескольким полям модели, в том числе динамическим. Для примера, есть таблица Контакт с несколькими известными полями (телефон, адрес и тд.), плюс пользователь может задавать свои (например профессия), соответственно можно искать по наличию такого поля, и по его значению. Я планировал впихнуть эти поля в одно текстовое, в виде json'а. Вот теперь вопрос, какой поиск выбрать?
Sphinx умеет индексировать json атрибуты, но с реализацией на питоне проблемы: django-sphinx заброшен, в spinxit нет поддержки json-атрибутов (разве что форкать и допиливать), django-sphinxql в альфе.
Haystack + Whoosh привлекает тем что все на Питоне. Но я не нашёл как там искать по json'у.
Haystack + Elasticsearch вообще круто - и json и faceting по нему, но это здоровый java-монстр, или по крайней мере у меня есть такое предубеждение.
Подскажите пожалуйста, что в даном случае выбрать? Или какие есть ещё варианты? Ну или может мне БД по другому реализовать?
Офлайн
Может sorl?
Офлайн
Ну Solr от Elasticsearch не сильно отличается, оба на Lucene.
Офлайн
avo9EAV?
Ну или может мне БД по другому реализовать?
Офлайн
Дело в том что у меня база - MySQL, соответственно по перформансу вряд ли это лучшее решение. Плюс я еще использую Django REST Framework, поэтому json-поле подошло бы лучше, кроме того у меня не так много операций с этими атрибутами кроме поиска, так что поддержка ORM не так уж и нужа.
Все же сейчас пробую самый простой вариант EAV - m2m связь, приблизительно так:
class Property(models.Model): owner = models.ForeignKey(User) name = models.CharField(max_length=100) class Contact(models.Model): owner = models.ForeignKey(User) name = models.CharField(max_length=100) groups = models.ManyToManyField(Group) properties = models.ManyToManyField(Property, through='ContactProperty') class ContactProperty(models.Model): owner = models.ForeignKey(User) contact = models.ForeignKey(Contact) property = models.ForeignKey(Property) value = models.CharField(max_length=255)
Офлайн