From 8d7393a044a28a0b89232d145dd6e8ddb1cd4cfe Mon Sep 17 00:00:00 2001 From: Yuri Zmytrakov Date: Thu, 28 Aug 2025 15:23:57 +0200 Subject: [PATCH 1/2] fix: Add id field to sort config for consisteny pagination The pagination does not work correctly for rel: `next` section in /search endpoint of the returned product list. This commit adds id parameter to sorting so that token obtains a unique value. --- .../stac_fastapi/sfeos_helpers/database/query.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/stac_fastapi/sfeos_helpers/stac_fastapi/sfeos_helpers/database/query.py b/stac_fastapi/sfeos_helpers/stac_fastapi/sfeos_helpers/database/query.py index 97df5703..80d07128 100644 --- a/stac_fastapi/sfeos_helpers/stac_fastapi/sfeos_helpers/database/query.py +++ b/stac_fastapi/sfeos_helpers/stac_fastapi/sfeos_helpers/database/query.py @@ -80,11 +80,14 @@ def populate_sort_shared(sortby: List) -> Optional[Dict[str, Dict[str, str]]]: This function transforms a list of sort specifications into the format required by Elasticsearch/OpenSearch for sorting query results. The returned dictionary can be directly used in search requests. + Always includes 'id' as secondary sort to ensure unique pagination tokens. """ if sortby: - return {s.field: {"order": s.direction} for s in sortby} + sort_config = {s.field: {"order": s.direction} for s in sortby} + sort_config.setdefault("id", {"order": "asc"}) + return sort_config else: - return None + return {"id": {"order": "asc"}} def add_collections_to_body( From 93826d08290e4b730dcd16bd8926c6f625ffc651 Mon Sep 17 00:00:00 2001 From: Yuri Zmytrakov Date: Mon, 1 Sep 2025 17:03:51 +0200 Subject: [PATCH 2/2] chore: update changelog for added secondary sort by id --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a7bc3a2..ab27b546 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +- Added `id` field as secondary sort to sort config to ensure unique pagination tokens. [#421](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/421) + ## [v6.2.0] - 2025-08-27