Skip to content

Geometries-Endpoint Performance optimieren– nur relevante Felder aus Elasticsearch abfragen #1011

Description

@uhon

Beschreibung:

Der /api/geometries-Endpoint liefert aktuell für jedes Asset den gesamten data-JSON-Blob aus dem ES-Index swissgeol_asset_asset zurück. Dieses Feld enthält Titel, Kontakte, TopicCodes, Geometrien etc. – der Endpoint benötigt davon aber nur:

  • id (AssetId)
  • isPublic (boolean)
  • geometries[].centroid (Koordinaten)
  • geometries[].id (GeometryId)
  • geometries[].type (GeometryType)

Da die Daten als einzelner JSON-String ist (AssetJSON) geladen werden, kann ES kein _source-Filtering darauf anwenden. Es muss immer der gesamte Blob (~1–3 KB pro Asset) geladen und im Backend geparst werden.

Umsetzung:

  1. ES-Mapping erweitern (swissgeol_asset_asset.json):
  • Neues nested Feld geometryData mit Subfeldern: - id (type: integer)
  • type (type: keyword)
  • centroidX (type: integer)
  • centroidY (type: integer)
  1. Asset-Writer anpassen (asset-search-writer.service.ts → mapAssetToElastic()):
  • geometryData aus den Geometrien (bereits im gleichen Promise.all geladen) befüllen
  1. Geometries-Controller umschreiben:
  • Direkt ES-Client verwenden statt AssetSearchService.search() - Oder eigenen Service dafür erstellen
  • Query mit _source: ['id', 'isPublic', 'geometryData'] – nur die 3 Felder laden
  • hasFiles-Filter als term-Clause beibehalten
  1. Einmaliges Re-Indexing aller bestehenden Assets erforderlich (via bestehenden Sync-Mechanismus

Erwarteter Effekt:

  • Deutlich reduziertes Datenvolumen pro ES-Antwort (~50–100 Bytes statt 1–3 KB pro Asset)
  • Kein JSON-Parsing des data-Blobs im Backend
  • Schnellere Response-Zeit des Endpoints, weniger Speicherverbrauch

Hinweis: Diese Optimierung wurde bereits prototypisch implementiert und funktioniert:
https://github.com/swisstopo/swissgeol-assets-suite/tree/poc%2Fadd-separate-geometries-index-on-assets

Muss unbedingt auf Herz und Nieren geprüft werden.
Sie wurde nur zurückgestellt, da der grösste Performance-Gewinn für Dokumente bereits durch den Wechsel vom File-Index auf den Asset-Index erzielt wurde.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions