Skip to content

Commit 46d2203

Browse files
authored
Search: don't sort inner hits (#12560)
We used to need to do this when we had sections and sphinx domains separated, now they are merged into sections, so no need to sort the results.
1 parent e4611c8 commit 46d2203

File tree

1 file changed

+20
-32
lines changed

1 file changed

+20
-32
lines changed

readthedocs/search/api/v2/serializers.py

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
import re
1010
from functools import namedtuple
11-
from operator import attrgetter
1211
from urllib.parse import urlparse
1312

1413
from rest_framework import serializers
@@ -55,6 +54,25 @@ def get_title(self, obj):
5554
return list(getattr(obj, "title", []))
5655

5756

57+
class SectionHighlightSerializer(serializers.Serializer):
58+
title = serializers.SerializerMethodField()
59+
content = serializers.SerializerMethodField()
60+
61+
def get_title(self, obj):
62+
return list(getattr(obj, "sections.title", []))
63+
64+
def get_content(self, obj):
65+
return list(getattr(obj, "sections.content", []))
66+
67+
68+
class SectionSearchSerializer(serializers.Serializer):
69+
type = serializers.CharField(default="section", source=None, read_only=True)
70+
id = serializers.CharField()
71+
title = serializers.CharField()
72+
content = serializers.CharField()
73+
highlights = SectionHighlightSerializer(source="meta.highlight", default=dict)
74+
75+
5876
class PageSearchSerializer(serializers.Serializer):
5977
"""
6078
Page serializer.
@@ -74,7 +92,7 @@ class PageSearchSerializer(serializers.Serializer):
7492
path = serializers.SerializerMethodField()
7593
domain = serializers.SerializerMethodField()
7694
highlights = PageHighlightSerializer(source="meta.highlight", default=dict)
77-
blocks = serializers.SerializerMethodField()
95+
blocks = SectionSearchSerializer(source="meta.inner_hits.sections", many=True, default=list)
7896

7997
def __init__(self, *args, projects=None, **kwargs):
8098
if projects:
@@ -152,33 +170,3 @@ def _get_full_path(self, obj):
152170

153171
return docs_url.rstrip("/") + "/" + path.lstrip("/")
154172
return None
155-
156-
def get_blocks(self, obj):
157-
"""Combine and sort inner results (domains and sections)."""
158-
sections = obj.meta.inner_hits.sections or []
159-
sorted_results = sorted(
160-
sections,
161-
key=attrgetter("meta.score"),
162-
reverse=True,
163-
)
164-
sorted_results = [SectionSearchSerializer(hit).data for hit in sorted_results]
165-
return sorted_results
166-
167-
168-
class SectionHighlightSerializer(serializers.Serializer):
169-
title = serializers.SerializerMethodField()
170-
content = serializers.SerializerMethodField()
171-
172-
def get_title(self, obj):
173-
return list(getattr(obj, "sections.title", []))
174-
175-
def get_content(self, obj):
176-
return list(getattr(obj, "sections.content", []))
177-
178-
179-
class SectionSearchSerializer(serializers.Serializer):
180-
type = serializers.CharField(default="section", source=None, read_only=True)
181-
id = serializers.CharField()
182-
title = serializers.CharField()
183-
content = serializers.CharField()
184-
highlights = SectionHighlightSerializer(source="meta.highlight", default=dict)

0 commit comments

Comments
 (0)