Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 26, 2014 22:27:07

avo9
От:
Зарегистрирован: 2011-01-09
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой поиск выбрать?

Задача: Полнотекстовый поиск по нескольким полям модели, в том числе динамическим. Для примера, есть таблица Контакт с несколькими известными полями (телефон, адрес и тд.), плюс пользователь может задавать свои (например профессия), соответственно можно искать по наличию такого поля, и по его значению. Я планировал впихнуть эти поля в одно текстовое, в виде json'а. Вот теперь вопрос, какой поиск выбрать?
Sphinx умеет индексировать json атрибуты, но с реализацией на питоне проблемы: django-sphinx заброшен, в spinxit нет поддержки json-атрибутов (разве что форкать и допиливать), django-sphinxql в альфе.
Haystack + Whoosh привлекает тем что все на Питоне. Но я не нашёл как там искать по json'у.
Haystack + Elasticsearch вообще круто - и json и faceting по нему, но это здоровый java-монстр, или по крайней мере у меня есть такое предубеждение.
Подскажите пожалуйста, что в даном случае выбрать? Или какие есть ещё варианты? Ну или может мне БД по другому реализовать?



Офлайн

#2 Сен. 30, 2014 09:33:18

Oik741
Зарегистрирован: 2013-01-06
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой поиск выбрать?

Может sorl?

Офлайн

#3 Окт. 3, 2014 10:20:06

avo9
От:
Зарегистрирован: 2011-01-09
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой поиск выбрать?

Ну Solr от Elasticsearch не сильно отличается, оба на Lucene.



Офлайн

#4 Окт. 3, 2014 11:34:35

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Какой поиск выбрать?

avo9
Ну или может мне БД по другому реализовать?
EAV?

Офлайн

#5 Окт. 3, 2014 12:37:32

avo9
От:
Зарегистрирован: 2011-01-09
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Какой поиск выбрать?

Дело в том что у меня база - 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)

Но возможно вернусь к допиливанию spinxit.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version