You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+8-2Lines changed: 8 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,23 +9,29 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
9
9
10
10
### Added
11
11
12
+
- Spatial search support for collections via `bbox` parameter on `/collections` endpoint. Collections are now indexed with a `bbox_shape` field (GeoJSON polygon) derived from their spatial extent for efficient geospatial queries when created or updated. [#481](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/481)
13
+
- Introduced SFEOS Tools (`sfeos_tools/`) - An installable Click-based CLI package for managing SFEOS deployments. Initial command `add-bbox-shape` adds the `bbox_shape` field to existing collections for spatial search compatibility. Install with `pip install sfeos-tools[elasticsearch]` or `pip install sfeos-tools[opensearch]`. [#481](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/481)
14
+
- Moved SFEOS Tools to its own repository at [Healy-Hyperspatial/sfeos-tools](https://github.com/Healy-Hyperspatial/sfeos-tools). The CLI package is now maintained separately. [#PR_NUMBER]
12
15
- CloudFerro logo to sponsors and supporters list [#485](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/485)
13
16
- Latest news section to README [#485](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/485)
14
17
- Added Redis caching configuration for navigation pagination support, enabling proper `prev` and `next` links in paginated responses. [#488](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/488)
15
18
16
19
### Changed
17
20
21
+
- Removed ENV_MAX_LIMIT environment variable; maximum limits are now handled by the default global limit environment variable. [#482](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/482)
22
+
- Changed the default and maximum pagination limits for collections/items endpoints. [#482](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/482)
23
+
18
24
### Fixed
19
25
20
-
[v6.5.1] - 2025-09-30
26
+
## [v6.5.1] - 2025-09-30
21
27
22
28
### Fixed
23
29
24
30
- Issue where token, query param was not being passed to POST collections search logic [#483](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/483)
25
31
- Issue where datetime param was not being passed from POST collections search logic to Elasticsearch [#483](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/483)
26
32
- Collections search tests to ensure both GET /collections and GET/POST /collections-search endpoints are tested [#483](https://github.com/stac-utils/stac-fastapi-elasticsearch-opensearch/pull/483)
-**10/15/2025:** 🚀 SFEOS Tools v0.1.0 Released! - The new `sfeos-tools` CLI is now available on [PyPI](https://pypi.org/project/sfeos-tools/)
34
+
-**10/15/2025:** Added `reindex` command to **[SFEOS-tools](https://github.com/Healy-Hyperspatial/sfeos-tools)** for zero-downtime index updates when changing mappings or settings. The new `reindex` command makes it easy to apply mapping changes, update index settings, or migrate to new index structures without any service interruption, ensuring high availability of your STAC API during maintenance operations.
35
+
-**10/12/2025:** Collections search **bbox** functionality added! The collections search extension now supports bbox queries. Collections will need to be updated via the API or with the new **[SFEOS-tools](https://github.com/Healy-Hyperspatial/sfeos-tools)** CLI package to support geospatial discoverability. 🙏 Thanks again to **CloudFerro** for their sponsorship of this work!
36
+
-**10/04/2025:** The **[CloudFerro](https://cloudferro.com/)** logo has been added to the sponsors and supporters list above. Their sponsorship of the ongoing collections search extension work has been invaluable. This is in addition to the many other important changes and updates their developers have added to the project.
34
37
35
-
- 10/04/2025: The [CloudFerro](https://cloudferro.com/) logo has been added to the sponsors and supporters list above. Their sponsorship of the ongoing collections search extension work has been invaluable. This is in addition to the many other important changes and updates their developers have added to the project.
-**09/25/2025:** v6.5.0 adds a new GET/POST /collections-search endpoint (disabled by default via ENABLE_COLLECTIONS_SEARCH_ROUTE) to avoid conflicts with the Transactions Extension, and enhances collections search with structured filtering (CQL2 JSON/text), query, and datetime filtering. These changes make collection discovery more powerful and configurable while preserving compatibility with transaction-enabled deployments.
43
+
<!-- Add more older news items here in Markdown format; GitHub will parse them thanks to the blank line implicit in this structure -->
44
+
45
+
</details>
36
46
37
-
</div>
38
47
39
48
## Project Introduction - What is SFEOS?
40
49
@@ -105,6 +114,7 @@ This project is built on the following technologies: STAC, stac-fastapi, FastAPI
105
114
-[Interacting with the API](#interacting-with-the-api)
106
115
-[Configure the API](#configure-the-api)
107
116
-[Collection Pagination](#collection-pagination)
117
+
-[SFEOS Tools CLI](#sfeos-tools-cli)
108
118
-[Ingesting Sample Data CLI Tool](#ingesting-sample-data-cli-tool)
@@ -160,9 +170,21 @@ These endpoints support advanced collection discovery features including:
160
170
- Collections are matched if their temporal extent overlaps with the provided datetime parameter
161
171
- This allows for efficient discovery of collections based on time periods
162
172
173
+
-**Spatial Filtering**: Filter collections by their spatial extent using the `bbox` parameter
174
+
- Example: `/collections?bbox=-10,35,40,70` (finds collections whose spatial extent intersects with this bounding box)
175
+
- Example: `/collections?bbox=-180,-90,180,90` (finds all collections with global coverage)
176
+
- Supports both 2D bounding boxes `[minx, miny, maxx, maxy]` and 3D bounding boxes `[minx, miny, minz, maxx, maxy, maxz]` (altitude values are ignored for spatial queries)
177
+
- Collections are matched if their spatial extent (stored in the `extent.spatial.bbox` field) intersects with the provided bbox parameter
178
+
-**Implementation Note**: When collections are created or updated, a `bbox_shape` field is automatically generated from the collection's spatial extent and indexed as a GeoJSON polygon for efficient geospatial queries
179
+
-**Migrating Legacy Collections**: Collections created before this feature was added will not be discoverable via bbox search until they have the `bbox_shape` field added. You can either:
180
+
- Update each collection via the API (PUT `/collections/{collection_id}` with the existing collection data)
181
+
- Use the [SFEOS Tools CLI](https://github.com/Healy-Hyperspatial/sfeos-tools) (install with `pip install sfeos-tools[elasticsearch]` or `pip install sfeos-tools[opensearch]`):
These extensions make it easier to build user interfaces that display and navigate through collections efficiently.
164
186
165
-
> **Configuration**: Collection search extensions (sorting, field selection, free text search, structured filtering, and datetime filtering) for the `/collections` endpoint can be disabled by setting the `ENABLE_COLLECTIONS_SEARCH` environment variable to `false`. By default, these extensions are enabled.
187
+
> **Configuration**: Collection search extensions (sorting, field selection, free text search, structured filtering, datetime filtering, and spatial filtering) for the `/collections` endpoint can be disabled by setting the `ENABLE_COLLECTIONS_SEARCH` environment variable to `false`. By default, these extensions are enabled.
166
188
>
167
189
> **Configuration**: The custom `/collections-search` endpoint can be enabled by setting the `ENABLE_COLLECTIONS_SEARCH_ROUTE` environment variable to `true`. By default, this endpoint is **disabled**.
168
190
@@ -309,16 +331,18 @@ You can customize additional settings in your `.env` file:
309
331
|`ENABLE_COLLECTIONS_SEARCH`| Enable collection search extensions (sort, fields, free text search, structured filtering, and datetime filtering) on the core `/collections` endpoint. |`true`| Optional |
310
332
|`ENABLE_COLLECTIONS_SEARCH_ROUTE`| Enable the custom `/collections-search` endpoint (both GET and POST methods). When disabled, the custom endpoint will not be available, but collection search extensions will still be available on the core `/collections` endpoint if `ENABLE_COLLECTIONS_SEARCH` is true. |`false`| Optional |
311
333
|`ENABLE_TRANSACTIONS_EXTENSIONS`| Enables or disables the Transactions and Bulk Transactions API extensions. This is useful for deployments where mutating the catalog via the API should be prevented. If set to `true`, the POST `/collections` route for search will be unavailable in the API. |`true`| Optional |
312
-
|`STAC_ITEM_LIMIT`| Sets the environment variable for result limiting to SFEOS for the number of returned items and STAC collections. |`10`| Optional |
334
+
|`STAC_GLOBAL_COLLECTION_MAX_LIMIT`| Configures the maximum number of STAC collections that can be returned in a single search request. | N/A | Optional |
335
+
|`STAC_DEFAULT_COLLECTION_LIMIT`| Configures the default number of STAC collections returned when no limit parameter is specified in the request. |`300`| Optional |
336
+
|`STAC_GLOBAL_ITEM_MAX_LIMIT`| Configures the maximum number of STAC items that can be returned in a single search request. | N/A | Optional |
337
+
|`STAC_DEFAULT_ITEM_LIMIT`| Configures the default number of STAC items returned when no limit parameter is specified in the request. |`10`| Optional |
313
338
|`STAC_INDEX_ASSETS`| Controls if Assets are indexed when added to Elasticsearch/Opensearch. This allows asset fields to be included in search queries. |`false`| Optional |
314
-
|`ENV_MAX_LIMIT`| Configures the environment variable in SFEOS to override the default `MAX_LIMIT`, which controls the limit parameter for returned items and STAC collections. |`10,000`| Optional |
315
339
|`USE_DATETIME`| Configures the datetime search behavior in SFEOS. When enabled, searches both datetime field and falls back to start_datetime/end_datetime range for items with null datetime. When disabled, searches only by start_datetime/end_datetime range. |`true`| Optional |
316
340
317
341
> [!NOTE]
318
342
> The variables `ES_HOST`, `ES_PORT`, `ES_USE_SSL`, `ES_VERIFY_CERTS` and `ES_TIMEOUT` apply to both Elasticsearch and OpenSearch backends, so there is no need to rename the key names to `OS_` even if you're using OpenSearch.
319
343
320
-
**Redis for Navigation:**
321
-
These Redis configuration variables enable proper navigation functionality in STAC FastAPI. The Redis cache stores navigation state for paginated results, allowing the system to maintain previous page links using tokens. The configuration supports either Redis Sentinel or standalone Redis setups.
344
+
## Redis for Navigation:
345
+
These Redis configuration variables to enable proper navigation functionality in STAC FastAPI.
-**Overview**: [SFEOS Tools](https://github.com/Healy-Hyperspatial/sfeos-tools) is an installable CLI package for managing and maintaining SFEOS deployments. This CLI package provides utilities for managing and maintaining SFEOS deployments.
527
+
528
+
-**Installation**:
529
+
```shell
530
+
# For Elasticsearch (from PyPI)
531
+
pip install sfeos-tools[elasticsearch]
532
+
533
+
# For OpenSearch (from PyPI)
534
+
pip install sfeos-tools[opensearch]
535
+
536
+
```
537
+
538
+
-**Available Commands**:
539
+
-`add-bbox-shape`: Add bbox_shape field to existing collections for spatial search support
540
+
-`reindex`: Reindex all STAC indices (collections and per-collection items) to new versioned indices and update aliases; supports both Elasticsearch and OpenSearch backends. Use this when you need to apply mapping changes, update index settings, or migrate to a new index structure. The command handles the entire process including creating new indices, reindexing data, and atomically updating aliases with zero downtime.
For complete documentation, examples, and advanced usage, please visit the [SFEOS Tools GitHub repository](https://github.com/Healy-Hyperspatial/sfeos-tools).
581
+
582
+
-**Contributing**:
583
+
Contributions, bug reports, and feature requests are welcome! Please file them on the [SFEOS Tools issue tracker](https://github.com/Healy-Hyperspatial/sfeos-tools/issues).
584
+
500
585
## Ingesting Sample Data CLI Tool
501
586
502
587
-**Overview**: The `data_loader.py` script provides a convenient way to load STAC items into the database.
@@ -530,6 +615,15 @@ The system uses a precise naming convention:
The Redis cache stores navigation state for paginated results, allowing the system to maintain previous page links using tokens. The configuration supports both Redis Sentinel and standalone Redis setups.
621
+
622
+
Steps to configure:
623
+
1. Ensure that a Redis instance is available, either a standalone server or a Sentinel-managed cluster.
624
+
2. Establish a connection between STAC FastAPI and Redis instance by setting the appropriate [**environment variables**](#redis-for-navigation)These define the Redis host, port, authentication, and optional Sentinel settings.
625
+
3. Control whether Redis caching is activated using the `REDIS_ENABLE` environment variable to `True` or `False`.
626
+
533
627
## Elasticsearch Mappings
534
628
535
629
- **Overview**: Mappings apply to search index, not source data. They define how documents and their fields are stored and indexed.
0 commit comments