Skip to content

Commit

Permalink
Switching to query_string.
Browse files Browse the repository at this point in the history
  • Loading branch information
rhysrevans3 committed Aug 30, 2024
1 parent 42df567 commit 7476f20
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 19 deletions.
8 changes: 4 additions & 4 deletions stac_fastapi/core/stac_fastapi/core/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,7 @@ async def get_search(
token: Optional[str] = None,
fields: Optional[List[str]] = None,
sortby: Optional[str] = None,
q: Optional[List[str]] = None,
intersects: Optional[str] = None,
filter: Optional[str] = None,
filter_lang: Optional[str] = None,
Expand All @@ -474,6 +475,7 @@ async def get_search(
token (Optional[str]): Access token to use when searching the catalog.
fields (Optional[List[str]]): Fields to include or exclude from the results.
sortby (Optional[str]): Sorting options for the results.
q (Optional[List[str]]): Free text query to filter the results.
intersects (Optional[str]): GeoJSON geometry to search in.
kwargs: Additional parameters to be passed to the API.
Expand All @@ -490,6 +492,7 @@ async def get_search(
"limit": limit,
"token": token,
"query": orjson.loads(query) if query else query,
"q": q,
}

if datetime:
Expand Down Expand Up @@ -601,10 +604,7 @@ async def post_search(
)

if hasattr(search_request, "q"):
q_param = getattr(search_request, "q", None)
free_text_queries = (
q_param.split(",") if isinstance(q_param, str) else q_param
)
free_text_queries = getattr(search_request, "q", None)
try:
search = self.database.apply_free_text_filter(search, free_text_queries)
except Exception as e:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -514,13 +514,11 @@ def apply_stacql_filter(search: Search, op: str, field: str, value: float):
def apply_free_text_filter(search: Search, free_text_queries: Optional[List[str]]):
"""Database logic to perform query for search endpoint."""
if free_text_queries is not None:
# the colon is a reserved character
for free_text_query in free_text_queries:
search = search.query(
"multi_match",
query=free_text_query,
fields=["collection", "properties.*"],
)
free_text_query_string = '" OR properties.\\*:"'.join(free_text_queries)
search = search.query(
"query_string", query=f'properties.\\*:"{free_text_query_string}"'
)

return search

@staticmethod
Expand Down
2 changes: 2 additions & 0 deletions stac_fastapi/opensearch/stac_fastapi/opensearch/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from stac_fastapi.extensions.core import (
AggregationExtension,
FilterExtension,
FreeTextExtension,
SortExtension,
TokenPaginationExtension,
TransactionExtension,
Expand Down Expand Up @@ -71,6 +72,7 @@
SortExtension(),
TokenPaginationExtension(),
filter_extension,
FreeTextExtension(),
]

extensions = [aggregation_extension] + search_extensions
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -431,13 +431,11 @@ def apply_collections_filter(search: Search, collection_ids: List[str]):
def apply_free_text_filter(search: Search, free_text_queries: Optional[List[str]]):
"""Database logic to perform query for search endpoint."""
if free_text_queries is not None:
# the colon is a reserved character
for free_text_query in free_text_queries:
search = search.query(
"multi_match",
query=free_text_query,
fields=["collection", "properties.*"],
)
free_text_query_string = '" OR properties.\\*:"'.join(free_text_queries)
search = search.query(
"query_string", query=f'properties.\\*:"{free_text_query_string}"'
)

return search

@staticmethod
Expand Down
4 changes: 4 additions & 0 deletions stac_fastapi/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
AggregationExtension,
FieldsExtension,
FilterExtension,
FreeTextExtension,
SortExtension,
TokenPaginationExtension,
TransactionExtension,
Expand Down Expand Up @@ -215,6 +216,7 @@ async def app():
QueryExtension(),
TokenPaginationExtension(),
FilterExtension(),
FreeTextExtension(),
]

extensions = [aggregation_extension] + search_extensions
Expand Down Expand Up @@ -301,6 +303,7 @@ async def app_basic_auth():
QueryExtension(),
TokenPaginationExtension(),
FilterExtension(),
FreeTextExtension(),
]

extensions = [aggregation_extension] + search_extensions
Expand Down Expand Up @@ -380,6 +383,7 @@ async def route_dependencies_app():
QueryExtension(),
TokenPaginationExtension(),
FilterExtension(),
FreeTextExtension(),
]

post_request_model = create_post_request_model(extensions)
Expand Down
2 changes: 1 addition & 1 deletion stac_fastapi/tests/resources/test_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -544,7 +544,7 @@ async def test_item_search_free_text_extension(app_client, txn_client, ctx):

await create_item(txn_client, second_item)

params = {"q": "hello"}
params = {"q": ["hello"]}
resp = await app_client.post("/search", json=params)
assert resp.status_code == 200
resp_json = resp.json()
Expand Down

0 comments on commit 7476f20

Please sign in to comment.