Как осуществить поиск Django моделей по наибольшему количеству совпадений свойств?

Всем привет, возник такой вопрос. Есть задача - реализовать нечто вроде фильтра товаров как на Яндекс.Маркете на Django.

Конкретизирую:
Есть класс модели, и соответственно, куча записей в БД, соответствующих это модели. На странице интерфейса будет форма с редактированием параметров этой модели, на выходе должен быть список из N инстансов этой модели, в которых наибольшее количество совпадений с введенными на странице значениями. Упорядочить, соответственно, по количеству совпавших свойств.

Почему спрашиваю:
В голову приходила следующая идея: брать из БД те строки, в которых есть хотя бы одно совпадение с введенными параметрами, и уже программно генерировать тот список. Но есть одно но, по такому запросу может получиться огромный массив объектов, а так как ожидается, что на странице этот список будет обновляться асинхронно, аяксом, по любому изменению одного из параметров пользователем, получится очень частый запрос очень большого объема данных, как бы это не сказалось на скорости, да и звучит крайне не оптимально.

Кто-нибудь сталкивался с реализацией подобного функционала? Какие алгоритмы и приемы для этого используются. или может в Django есть уже готовые инструменты (пусть даже от сторонних разработчиков) для решения таких задач?

Спасибо.
  • Вопрос задан
  • 2871 просмотр
Пригласить эксперта
Ответы на вопрос 3
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
есть такая тема пейджинг и не надо сразу все объекты отображать
Ответ написан
syschel
@syschel
freelance/python/django/backend
Занимаюсь сейчас аналогичным вопросом.
У меня реализовано три модели
1. Товар
2. Название характеристики
3. Значение характеристики
3.1. Связь с товаром
3.2. Связь с названием характеристики
3.3. Значение характеристики

Поиск идёт по третей модели. Записей, по числу строк, много. Но данных в них хранится мало.
Первый запрос - достаём 3.3, получаем выбранное количество товаров. Второй запрос по ИД товаров из этого списка, вытаскивает уже сами товары.

Ещё есть вариант использовать поисковые движки, а не насиловать БД на поиск.
Ответ написан
@romamo
Архитектура. Highload. Data mining
Sphinx https://github.com/Yuego/django-sphinx
Memcached для кеширования счетчиков и результатов выборки
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы