Skip to content

Commit

Permalink
Optimize search API view
Browse files Browse the repository at this point in the history
Eliminate extra SQL queries executed by search API view.
  • Loading branch information
cutwater committed Nov 19, 2018
1 parent fdc9a15 commit 263c874
Showing 1 changed file with 22 additions and 4 deletions.
26 changes: 22 additions & 4 deletions galaxy/api/views/search.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,26 @@ class ContentSearchView(base.ListAPIView):
filter_backends = [filters.OrderByFilter]

def get_queryset(self):
return (models.Content.objects.distinct()
.filter(
repository__provider_namespace__namespace__isnull=False,
repository__provider_namespace__namespace__active=True))
return (
models.Content.objects.distinct()
.select_related(
'content_type',
'namespace',
'repository',
'repository__provider_namespace',
'repository__provider_namespace__namespace',
)
.prefetch_related(
'videos',
'tags',
'dependencies',
'platforms',
'repository__versions',
)
.filter(
repository__provider_namespace__namespace__isnull=False,
repository__provider_namespace__namespace__active=True)
)

# TODO(cutwater): Use serializer to parse request arguments
def list(self, request, *args, **kwargs):
Expand Down Expand Up @@ -129,8 +145,10 @@ def list(self, request, *args, **kwargs):

tags = request.GET.get('tags_autocomplete', '').split()
queryset = self.add_tags_filter(queryset, tags)

platforms = request.GET.get('platforms_autocomplete', '').split()
queryset = self.add_platforms_filter(queryset, platforms)

namespaces = request.GET.get('username_autocomplete', '').split()
queryset = self.add_namespaces_filter(queryset, namespaces)

Expand Down

0 comments on commit 263c874

Please sign in to comment.