def elastic_search(request): """Use Elasticsearch for global search.""" user_input = UserInput( query=request.GET.get('q'), type=request.GET.get('type', 'project'), project=request.GET.get('project'), version=request.GET.get('version', LATEST), taxonomy=request.GET.get('taxonomy'), language=request.GET.get('language'), ) results = '' facets = {} if user_input.query: if user_input.type == 'project': project_search = ProjectDocument.faceted_search( query=user_input.query, language=user_input.language) results = project_search.execute() facets = results.facets elif user_input.type == 'file': kwargs = {} if user_input.project: projects_list = get_project_list_or_404( project_slug=user_input.project, user=request.user) project_slug_list = [project.slug for project in projects_list] kwargs['projects_list'] = project_slug_list if user_input.version: kwargs['versions_list'] = user_input.version page_search = PageDocument.faceted_search(query=user_input.query, **kwargs) results = page_search.execute() facets = results.facets if settings.DEBUG: print(pprint(results)) print(pprint(facets)) if user_input.query: user = '' if request.user.is_authenticated(): user = request.user log.info( LOG_TEMPLATE.format( user=user, project=user_input.project or '', type=user_input.type or '', version=user_input.version or '', language=user_input.language or '', msg=user_input.query or '', )) template_vars = user_input._asdict() template_vars.update({'results': results, 'facets': facets}) return render( request, 'search/elastic_search.html', template_vars, )
def get_all_projects_url(self): version_slug = self.request.query_params.get('version') project_slug = self.request.query_params.get('project') all_projects = get_project_list_or_404(project_slug=project_slug, user=self.request.user) projects_url = {} for project in all_projects: projects_url[project.slug] = project.get_docs_url(version_slug=version_slug) return projects_url
def get_all_projects(self): """ Return a list containing the project itself and all its subprojects. The project slug is retrieved from ``project`` query param. :rtype: list :raises: Http404 if project is not found """ project_slug = self.request.query_params.get('project') version_slug = self.request.query_params.get('version') all_projects = get_project_list_or_404( project_slug=project_slug, user=self.request.user, version_slug=version_slug, ) return all_projects
def get_all_projects(self): """ Return a list containing the project itself and all its subprojects. The project slug is retrieved from ``project`` query param. :rtype: list :raises: Http404 if project is not found """ project_slug = self.request.query_params.get('project') version_slug = self.request.query_params.get('version') all_projects = get_project_list_or_404( project_slug=project_slug, user=self.request.user, version_slug=version_slug, ) return all_projects