From e66b274f0e3115463aadd6ddf0da4c21aebf44f2 Mon Sep 17 00:00:00 2001 From: Skia Date: Mon, 19 Dec 2016 21:00:09 +0100 Subject: [PATCH] Add index to search function --- core/models.py | 1 - core/search_indexes.py | 4 ---- core/views/site.py | 22 ++++------------------ 3 files changed, 4 insertions(+), 23 deletions(-) diff --git a/core/models.py b/core/models.py index efc18803..d27534df 100644 --- a/core/models.py +++ b/core/models.py @@ -613,7 +613,6 @@ class SithFile(models.Model): self.copy_rights() def apply_rights_recursively(self, only_folders=False): - print(self) children = self.children.all() if only_folders: children = children.filter(is_folder=True) diff --git a/core/search_indexes.py b/core/search_indexes.py index 053e9c74..23879144 100644 --- a/core/search_indexes.py +++ b/core/search_indexes.py @@ -13,7 +13,3 @@ class UserIndex(indexes.SearchIndex, indexes.Indexable): """Used when the entire index for model is updated.""" return self.get_model().objects.all() - def prepare(self, obj): - ret = super(UserIndex, self).prepare(obj) - print(ret) - return ret diff --git a/core/views/site.py b/core/views/site.py index 2ac534c6..8ffb88ce 100644 --- a/core/views/site.py +++ b/core/views/site.py @@ -10,6 +10,8 @@ import os import json from itertools import chain +from haystack.query import SearchQuerySet + from core.models import User, Notification from club.models import Club @@ -34,24 +36,8 @@ def notification(request, notif_id): return redirect("/") def search_user(query, as_json=False): - users = [] - if query: - exact_nick = User.objects.filter(nick_name__iexact=query).all() - nicks = User.objects.filter(nick_name__icontains=query).exclude(id__in=exact_nick).all() - users = User.objects.filter(Q(first_name__icontains=query) | - Q(last_name__icontains=query)).exclude(id__in=exact_nick).exclude(id__in=nicks).all() - nicks = nicks[:5] - users = users[:50] - if as_json: # Re-loads json to avoid double encoding by JsonResponse, but still benefit from serializers - exact_nick = json.loads(serializers.serialize('json', exact_nick, fields=('nick_name', 'last_name', 'first_name', 'profile_pict'))) - nicks = json.loads(serializers.serialize('json', nicks, fields=('nick_name', 'last_name', 'first_name', 'profile_pict'))) - users = json.loads(serializers.serialize('json', users, fields=('nick_name', 'last_name', 'first_name', 'profile_pict'))) - else: - exact_nick = list(exact_nick) - nicks = list(nicks) - users = list(users) - users = exact_nick + nicks + users - return users + res = SearchQuerySet().models(User).filter(text=query).filter_or(text__contains=query)[:20] + return [r.object for r in res] def search_club(query, as_json=False): clubs = []