|
12 | 12 | from readthedocs.search.faceted_search import (
|
13 | 13 | AllSearch, ProjectSearch, PageSearch, DomainSearch, ALL_FACETS
|
14 | 14 | )
|
15 |
| -from readthedocs.search.utils import get_project_list_or_404 |
16 |
| - |
17 | 15 |
|
18 | 16 | log = logging.getLogger(__name__)
|
19 | 17 | LOG_TEMPLATE = '(Elastic Search) [{user}:{type}] [{project}:{version}:{language}] {msg}'
|
|
34 | 32 |
|
35 | 33 |
|
36 | 34 | def elastic_search(request, project_slug=None):
|
37 |
| - """Use Elasticsearch for global search.""" |
| 35 | + """ |
| 36 | + Global user search on the dashboard |
| 37 | +
|
| 38 | + This is for both the main search and project search. |
| 39 | +
|
| 40 | + :param project_slug: Sent when the view is a project search |
| 41 | + """ |
| 42 | + |
| 43 | + if project_slug: |
| 44 | + queryset = Project.objects.protected(request.user) |
| 45 | + project_obj = get_object_or_404(queryset, slug=project_slug) |
| 46 | + |
38 | 47 | user_input = UserInput(
|
39 | 48 | query=request.GET.get('q'),
|
40 |
| - type=request.GET.get('type', 'all'), |
| 49 | + type=request.GET.get('type', 'project'), |
41 | 50 | project=project_slug or request.GET.get('project'),
|
42 | 51 | version=request.GET.get('version', LATEST),
|
43 | 52 | taxonomy=request.GET.get('taxonomy'),
|
44 | 53 | language=request.GET.get('language'),
|
45 | 54 | doc_type=request.GET.get('doc_type'),
|
46 | 55 | index=request.GET.get('index'),
|
47 | 56 | )
|
| 57 | + |
48 | 58 | results = ''
|
49 | 59 | facets = {}
|
50 | 60 |
|
51 | 61 | if user_input.query:
|
52 | 62 | kwargs = {}
|
53 | 63 |
|
54 |
| - if user_input.project: |
55 |
| - projects_list = get_project_list_or_404( |
56 |
| - project_slug=user_input.project, user=request.user |
57 |
| - ) |
58 |
| - project_slug_list = [project.slug for project in projects_list] |
59 |
| - kwargs['project'] = project_slug_list |
60 |
| - log.info('Filtering to project list: %s' % project_slug_list) |
61 |
| - |
62 |
| - if user_input.version: |
63 |
| - kwargs['version'] = [user_input.version] |
64 |
| - |
65 |
| - if user_input.doc_type: |
66 |
| - kwargs['doc_type'] = user_input.doc_type |
67 |
| - |
68 |
| - if user_input.language: |
69 |
| - kwargs['language'] = user_input.language |
70 |
| - |
71 |
| - if user_input.index: |
72 |
| - kwargs['index'] = user_input.index |
| 64 | + for avail_facet in ALL_FACETS: |
| 65 | + value = getattr(user_input, avail_facet, None) |
| 66 | + if value: |
| 67 | + kwargs[avail_facet] = value |
73 | 68 |
|
74 | 69 | if user_input.type == 'project':
|
75 |
| - project_search = ProjectSearch( |
| 70 | + search = ProjectSearch( |
76 | 71 | query=user_input.query, user=request.user, **kwargs
|
77 | 72 | )
|
78 |
| - results = project_search.execute() |
79 |
| - facets = results.facets |
| 73 | + |
80 | 74 | elif user_input.type == 'domain':
|
81 |
| - project_search = DomainSearch( |
| 75 | + search = DomainSearch( |
82 | 76 | query=user_input.query, user=request.user, **kwargs
|
83 | 77 | )
|
84 |
| - results = project_search.execute() |
85 |
| - facets = results.facets |
86 |
| - elif user_input.type == 'file': |
87 | 78 |
|
88 |
| - page_search = PageSearch( |
| 79 | + elif user_input.type == 'file': |
| 80 | + search = PageSearch( |
89 | 81 | query=user_input.query, user=request.user, **kwargs
|
90 | 82 | )
|
91 |
| - results = page_search.execute() |
92 |
| - facets = results.facets |
| 83 | + |
93 | 84 | elif user_input.type == 'all':
|
94 |
| - project_search = AllSearch( |
| 85 | + search = AllSearch( |
95 | 86 | query=user_input.query, user=request.user, **kwargs
|
96 | 87 | )
|
97 |
| - results = project_search.execute() |
98 |
| - facets = results.facets |
| 88 | + |
| 89 | + results = search.execute() |
| 90 | + facets = results.facets |
99 | 91 |
|
100 | 92 | log.info(
|
101 | 93 | LOG_TEMPLATE.format(
|
@@ -135,9 +127,7 @@ def elastic_search(request, project_slug=None):
|
135 | 127 | })
|
136 | 128 |
|
137 | 129 | if project_slug:
|
138 |
| - queryset = Project.objects.protected(request.user) |
139 |
| - project = get_object_or_404(queryset, slug=project_slug) |
140 |
| - template_vars.update({'project_obj': project}) |
| 130 | + template_vars.update({'project_obj': project_obj}) |
141 | 131 |
|
142 | 132 | return render(
|
143 | 133 | request,
|
|
0 commit comments