1
- # -*- coding: utf-8 -*-
2
-
3
1
"""Search views."""
4
2
import collections
5
3
import logging
10
8
from readthedocs .builds .constants import LATEST
11
9
from readthedocs .projects .models import Project
12
10
from readthedocs .search .faceted_search import (
13
- AllSearch , ProjectSearch , PageSearch , DomainSearch , ALL_FACETS
11
+ ALL_FACETS ,
12
+ AllSearch ,
13
+ DomainSearch ,
14
+ PageSearch ,
15
+ ProjectSearch ,
14
16
)
15
17
18
+
16
19
log = logging .getLogger (__name__ )
17
20
LOG_TEMPLATE = '(Elastic Search) [%(user)s:%(type)s] [%(project)s:%(version)s:%(language)s] %(msg)s'
18
21
@@ -56,8 +59,17 @@ def elastic_search(request, project_slug=None):
56
59
role_name = request .GET .get ('role_name' ),
57
60
index = request .GET .get ('index' ),
58
61
)
62
+ search_facets = collections .defaultdict (
63
+ lambda : ProjectSearch ,
64
+ {
65
+ 'project' : ProjectSearch ,
66
+ 'domain' : DomainSearch ,
67
+ 'file' : PageSearch ,
68
+ 'all' : AllSearch ,
69
+ }
70
+ )
59
71
60
- results = ''
72
+ results = None
61
73
facets = {}
62
74
63
75
if user_input .query :
@@ -68,26 +80,9 @@ def elastic_search(request, project_slug=None):
68
80
if value :
69
81
kwargs [avail_facet ] = value
70
82
71
- if user_input .type == 'project' :
72
- search = ProjectSearch (
73
- query = user_input .query , user = request .user , ** kwargs
74
- )
75
-
76
- elif user_input .type == 'domain' :
77
- search = DomainSearch (
78
- query = user_input .query , user = request .user , ** kwargs
79
- )
80
-
81
- elif user_input .type == 'file' :
82
- search = PageSearch (
83
- query = user_input .query , user = request .user , ** kwargs
84
- )
85
-
86
- elif user_input .type == 'all' :
87
- search = AllSearch (
88
- query = user_input .query , user = request .user , ** kwargs
89
- )
90
-
83
+ search = search_facets [user_input .type ](
84
+ query = user_input .query , user = request .user , ** kwargs
85
+ )
91
86
results = search [:50 ].execute ()
92
87
facets = results .facets
93
88
@@ -105,7 +100,7 @@ def elastic_search(request, project_slug=None):
105
100
106
101
# Make sure our selected facets are displayed even when they return 0 results
107
102
for avail_facet in ALL_FACETS :
108
- value = getattr (user_input , avail_facet )
103
+ value = getattr (user_input , avail_facet , None )
109
104
if not value or avail_facet not in facets :
110
105
continue
111
106
if value not in [val [0 ] for val in facets [avail_facet ]]:
0 commit comments