diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index c7e86a7bf..703610f30 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -796,6 +796,34 @@ class DocumentSerializer( ) +class SearchResultSerializer(DocumentSerializer): + def to_representation(self, instance): + doc = ( + Document.objects.select_related( + "correspondent", + "storage_path", + "document_type", + "owner", + ) + .prefetch_related("tags", "custom_fields", "notes") + .get(id=instance["id"]) + ) + notes = ",".join( + [str(c.note) for c in doc.notes.all()], + ) + r = super().to_representation(doc) + r["__search_hit__"] = { + "score": instance.score, + "highlights": instance.highlights("content", text=doc.content), + "note_highlights": ( + instance.highlights("notes", text=notes) if doc else None + ), + "rank": instance.rank, + } + + return r + + class SavedViewFilterRuleSerializer(serializers.ModelSerializer): class Meta: model = SavedViewFilterRule diff --git a/src/documents/views.py b/src/documents/views.py index d279c69df..6f2dcb1ea 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -138,6 +138,7 @@ from documents.serialisers import DocumentSerializer from documents.serialisers import DocumentTypeSerializer from documents.serialisers import PostDocumentSerializer from documents.serialisers import SavedViewSerializer +from documents.serialisers import SearchResultSerializer from documents.serialisers import ShareLinkSerializer from documents.serialisers import StoragePathSerializer from documents.serialisers import TagSerializer @@ -799,34 +800,6 @@ class DocumentViewSet( return Response(sorted(entries, key=lambda x: x["timestamp"], reverse=True)) -class SearchResultSerializer(DocumentSerializer, PassUserMixin): - def to_representation(self, instance): - doc = ( - Document.objects.select_related( - "correspondent", - "storage_path", - "document_type", - "owner", - ) - .prefetch_related("tags", "custom_fields", "notes") - .get(id=instance["id"]) - ) - notes = ",".join( - [str(c.note) for c in doc.notes.all()], - ) - r = super().to_representation(doc) - r["__search_hit__"] = { - "score": instance.score, - "highlights": instance.highlights("content", text=doc.content), - "note_highlights": ( - instance.highlights("notes", text=notes) if doc else None - ), - "rank": instance.rank, - } - - return r - - class UnifiedSearchViewSet(DocumentViewSet): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)