Skip to content

Commit 9445a09

Browse files
author
Phil Varner
authored
use a stable sort by default for all queries for Items (#52)
* change default sort from none to the stable sorting of properties.datetime,id,collection
1 parent d3acbae commit 9445a09

File tree

2 files changed

+22
-10
lines changed

2 files changed

+22
-10
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
1818
### Changed
1919

2020
- Elasticsearch index mappings updated to be more thorough.
21+
- Endpoints that return items (e.g., /search) now sort the results by 'properties.datetime,id,collection'.
22+
Previously, there was no sort order defined.
2123

2224
### Removed
2325

stac_fastapi/elasticsearch/stac_fastapi/elasticsearch/core.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""Item crud client."""
22
import json
33
import logging
4-
from datetime import datetime
4+
from datetime import datetime as datetime_type
55
from typing import List, Optional, Type, Union
66
from urllib.parse import urljoin
77

@@ -147,15 +147,16 @@ def get_item(self, item_id: str, collection_id: str, **kwargs) -> Item:
147147
)
148148
return self.item_serializer.db_to_stac(item["_source"], base_url)
149149

150-
def _return_date(self, datetime):
151-
datetime = datetime.split("/")
152-
if len(datetime) == 1:
153-
datetime = datetime[0][0:19] + "Z"
150+
@staticmethod
151+
def _return_date(interval_str):
152+
intervals = interval_str.split("/")
153+
if len(intervals) == 1:
154+
datetime = intervals[0][0:19] + "Z"
154155
return {"eq": datetime}
155156
else:
156-
start_date = datetime[0]
157-
end_date = datetime[1]
158-
if ".." not in datetime:
157+
start_date = intervals[0]
158+
end_date = intervals[1]
159+
if ".." not in intervals:
159160
start_date = start_date[0:19] + "Z"
160161
end_date = end_date[0:19] + "Z"
161162
elif start_date != "..":
@@ -175,7 +176,7 @@ def get_search(
175176
collections: Optional[List[str]] = None,
176177
ids: Optional[List[str]] = None,
177178
bbox: Optional[List[NumType]] = None,
178-
datetime: Optional[Union[str, datetime]] = None,
179+
datetime: Optional[Union[str, datetime_type]] = None,
179180
limit: Optional[int] = 10,
180181
query: Optional[str] = None,
181182
token: Optional[str] = None,
@@ -238,7 +239,16 @@ def post_search(
238239
) -> ItemCollection:
239240
"""POST search catalog."""
240241
base_url = str(kwargs["request"].base_url)
241-
search = Search(using=self.client, index="stac_items")
242+
search = (
243+
Search()
244+
.using(self.client)
245+
.index("stac_items")
246+
.sort(
247+
{"properties.datetime": {"order": "desc"}},
248+
{"id": {"order": "desc"}},
249+
{"collection": {"order": "desc"}},
250+
)
251+
)
242252

243253
if search_request.query:
244254
if type(search_request.query) == str:

0 commit comments

Comments
 (0)