Форум сайта python.su
0
Задача: Полнотекстовый поиск по нескольким полям модели, в том числе динамическим. Для примера, есть таблица Контакт с несколькими известными полями (телефон, адрес и тд.), плюс пользователь может задавать свои (например профессия), соответственно можно искать по наличию такого поля, и по его значению. Я планировал впихнуть эти поля в одно текстовое, в виде json'а. Вот теперь вопрос, какой поиск выбрать?
Sphinx умеет индексировать json атрибуты, но с реализацией на питоне проблемы: django-sphinx заброшен, в spinxit нет поддержки json-атрибутов (разве что форкать и допиливать), django-sphinxql в альфе.
Haystack + Whoosh привлекает тем что все на Питоне. Но я не нашёл как там искать по json'у.
Haystack + Elasticsearch вообще круто - и json и faceting по нему, но это здоровый java-монстр, или по крайней мере у меня есть такое предубеждение.
Подскажите пожалуйста, что в даном случае выбрать? Или какие есть ещё варианты? Ну или может мне БД по другому реализовать?
Офлайн
0
Может sorl?
Офлайн
0
Ну Solr от Elasticsearch не сильно отличается, оба на Lucene.
Офлайн
47
avo9EAV?
Ну или может мне БД по другому реализовать?
Офлайн
0
Дело в том что у меня база - 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)
Офлайн