88
99import re
1010from functools import namedtuple
11- from operator import attrgetter
1211from urllib .parse import urlparse
1312
1413from 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+
5876class 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