Skip to content

Commit 177dcb1

Browse files
authored
Search: little optimization when saving search queries (#8132)
- Check max 30 queries, in case there is a flood of queries. - Fetch project and version in one query.
1 parent d69c9df commit 177dcb1

File tree

1 file changed

+14
-17
lines changed

1 file changed

+14
-17
lines changed

readthedocs/search/tasks.py

+14-17
Original file line numberDiff line numberDiff line change
@@ -167,35 +167,32 @@ def record_search_query(project_slug, version_slug, query, total_results, time_s
167167
modified__gte=before_10_sec,
168168
).order_by('-modified')
169169

170-
# If a partial query exists,
171-
# then just update that object.
172-
for partial_query in partial_query_qs.iterator():
170+
# If a partial query exists, then just update that object.
171+
# Check max 30 queries, in case there is a flood of queries.
172+
max_queries = 30
173+
for partial_query in partial_query_qs[:max_queries]:
173174
if query.startswith(partial_query.query):
174175
partial_query.query = query
175176
partial_query.total_results = total_results
176177
partial_query.save()
177178
return
178179

179-
project = Project.objects.filter(slug=project_slug).first()
180-
if not project:
181-
log.debug(
182-
'Not recording the search query because project does not exist. '
183-
'project_slug: %s', project_slug
184-
)
185-
return
186-
187-
version = Version.objects.filter(project=project, slug=version_slug).first()
188-
180+
version = (
181+
Version.objects
182+
.filter(slug=version_slug, project__slug=project_slug)
183+
.prefetch_related('project')
184+
.first()
185+
)
189186
if not version:
190187
log.debug(
191-
'Not recording the search query because version does not exist. '
192-
'project_slug: %s, version_slug: %s', project_slug, version_slug
188+
'Not recording the search query because project does not exist. '
189+
'project=%s version=%s',
190+
project_slug, version_slug,
193191
)
194192
return
195193

196-
# Create a new SearchQuery object.
197194
SearchQuery.objects.create(
198-
project=project,
195+
project=version.project,
199196
version=version,
200197
query=query,
201198
total_results=total_results,

0 commit comments

Comments
 (0)