Don't include list name in all search hits
authorMagnus Hagander <magnus@hagander.net>
Sat, 12 Jan 2013 18:18:17 +0000 (19:18 +0100)
committerMagnus Hagander <magnus@hagander.net>
Sat, 12 Jan 2013 18:18:17 +0000 (19:18 +0100)
It makes no sense, since an email can exist on multiple lists, which
would show up as multiple hits. And it made the queries slower...

django/archives/mailarchives/views.py

index 9be2b482ba0d165931d5c34e4c11aa0ff90ea7b1..4416ae4428a16bb180f65f342e895e46eec10e2d 100644 (file)
@@ -406,12 +406,12 @@ def search(request):
                # If not found, fall through to a regular search
 
        curs.execute("SET gin_fuzzy_search_limit=10000")
-       qstr = "SELECT listname, messageid, date, subject, _from, ts_rank_cd(fti, plainto_tsquery('public.pg', %(q)s)), ts_headline(bodytxt, plainto_tsquery('public.pg', %(q)s),'StartSel=\"[[[[[[\",StopSel=\"]]]]]]\"') FROM messages m INNER JOIN list_threads lt ON lt.threadid=m.threadid INNER JOIN lists l ON l.listid=lt.listid WHERE fti @@ plainto_tsquery('public.pg', %(q)s)"
+       qstr = "SELECT messageid, date, subject, _from, ts_rank_cd(fti, plainto_tsquery('public.pg', %(q)s)), ts_headline(bodytxt, plainto_tsquery('public.pg', %(q)s),'StartSel=\"[[[[[[\",StopSel=\"]]]]]]\"') FROM messages m WHERE fti @@ plainto_tsquery('public.pg', %(q)s)"
        params = {
                'q': query,
        }
        if lists:
-               qstr += " AND lt.listid=ANY(%(lists)s) "
+               qstr += " AND EXISTS (SELECT 1 FROM list_threads lt WHERE lt.threadid=m.threadid AND lt.listid=ANY(%(lists)s))"
                params['lists'] = lists
        if firstdate:
                qstr += " AND m.date > %(date)s"
@@ -426,7 +426,6 @@ def search(request):
        resp = HttpResponse(mimetype='application/json')
 
        json.dump([{
-                               'l': listname,
                                'm': messageid,
                                'd': date.isoformat(),
                                's': subject,
@@ -434,7 +433,7 @@ def search(request):
                                'r': rank,
                                'a': abstract.replace("[[[[[[", "<b>").replace("]]]]]]","</b>"),
 
-                               } for listname, messageid, date, subject, mailfrom, rank, abstract in curs.fetchall()],
+                               } for messageid, date, subject, mailfrom, rank, abstract in curs.fetchall()],
                          resp)
        return resp