Skip to content

Commit bc4d7b0

Browse files
committed
Fixes some integration issues when testing with API Gateway
1 parent 34a95fe commit bc4d7b0

File tree

2 files changed

+75
-8
lines changed

2 files changed

+75
-8
lines changed

deployment/lambda-search/app.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
aos_host = environ['OS_ENDPOINT']
1616
sagemaker_endpoint = environ['SAGEMAKER_ENDPOINT']
1717
os_secret_id = environ['OS_SECRET_ID']
18-
model_name = 'minilm-pretrain-knn'
18+
model_name = 'minilm-knn'
1919

2020
def get_awsauth_from_secret(region, secret_id):
2121
"""
@@ -264,6 +264,8 @@ def lambda_handler(event, context):
264264
verify_certs=True,
265265
connection_class=RequestsHttpConnection
266266
)
267+
268+
print(event)
267269

268270
k = 10
269271
payload = event['q']
@@ -275,9 +277,17 @@ def lambda_handler(event, context):
275277

276278
# Extract response variables
277279
from_param = event.get('from', 0)
280+
281+
# Validate 'from'
282+
if not from_param or not str(from_param).isdigit():
283+
from_param = 0
284+
else:
285+
from_param = int(from_param)
286+
278287
size = 10
279-
size_param = event.get('size', 10)
280-
if int(size_param) == 0:
288+
size_param = event.get('size', '')
289+
290+
if not size_param or not size_param.isdigit():
281291
size = 10
282292
else:
283293
size = int(size_param)
@@ -338,9 +348,7 @@ def lambda_handler(event, context):
338348
filters.append(build_spatial_filter(spatial_field, spatial_filter, relation))
339349

340350
# Sort param
341-
if sort_param and order_param:
342-
sort_param = build_sort_filter(sort_field=sort_param, sort_order=order_param)
343-
#filters.append(build_sort_filter(sort_field=sort_param, sort_order=order_param))
351+
sort_param = build_sort_filter(sort_field=sort_param, sort_order=order_param)
344352

345353
# If no filters are specified, set filters to None
346354
filters = filters if filters else None

deployment/lambda-search/filter_builder.py

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,9 @@ def build_spatial_filter(geo_field, bbox, relation=None):
139139
raise ValueError(f"Unsupported relation '{relation}'. Must be one of {supported_relations}.")
140140

141141
try:
142-
bbox = [float(val.strip()) for val in bbox.split("|") if val.strip()]
142+
bbox = [float(val.strip()) for val in bbox.split(",") if val.strip()]
143143
except ValueError:
144-
raise ValueError("Invalid bbox format. Ensure it is a '|' separated string of numeric values.")
144+
raise ValueError("Invalid bbox format. Ensure it is a ',' separated string of numeric values.")
145145

146146
if not bbox or len(bbox) != 4:
147147
raise ValueError("Invalid bbox. Expected four coordinates: \n"
@@ -171,6 +171,65 @@ def build_sort_filter(sort_field="relevancy", sort_order="desc"):
171171
"""
172172
Builds a dynamic sort parameter for OpenSearch based on a single field and order.
173173
174+
Args:
175+
sort_field (str): The field to sort by (e.g., "relevancy", "date", "popularity", "title").
176+
Defaults to "relevancy" (maps to '_score') if not provided.
177+
sort_order (str): The sort order ("asc" for ascending, "desc" for descending).
178+
Defaults to "desc". Forced to "desc" for relevancy.
179+
180+
Returns:
181+
list: A valid sort parameter for OpenSearch.
182+
183+
Raises:
184+
ValueError: If the provided sort_field is unsupported.
185+
"""
186+
187+
# Handle empty input strings by setting defaults
188+
if not sort_field:
189+
sort_field = "relevancy" # Default sort field
190+
if not sort_order:
191+
sort_order = "desc" # Default sort order
192+
193+
# Normalize input (case-insensitive)
194+
sort_field = sort_field.lower()
195+
sort_order = sort_order.lower()
196+
197+
# Supported sort fields
198+
supported_sort_fields = ["_score", "date", "popularity", "title", "relevancy"]
199+
200+
# Map user-friendly "relevancy" to OpenSearch's "_score"
201+
if sort_field == "relevancy":
202+
sort_field = "_score"
203+
204+
# Validate the sort field
205+
if sort_field not in supported_sort_fields:
206+
raise ValueError(
207+
f"Unsupported sort field '{sort_field}'. Supported fields are: {supported_sort_fields}."
208+
)
209+
210+
# Enforce descending order for '_score' (relevance)
211+
if sort_field == "_score":
212+
sort_order = "desc"
213+
214+
# Adjust for specific OpenSearch requirements
215+
field_mapping = {
216+
"title": "title.keyword", # Sort 'title' by its keyword version
217+
"date": "published" # Map 'date' to 'published'
218+
}
219+
sort_field = field_mapping.get(sort_field, sort_field)
220+
221+
# Ensure valid sort order
222+
if sort_order not in ["asc", "desc"]:
223+
raise ValueError("Invalid sort order. Must be 'asc' or 'desc'.")
224+
225+
# Return the sort parameter
226+
print(sort_field, " ", sort_order)
227+
return [{sort_field: {"order": sort_order}}]
228+
229+
def build_sort_filter2(sort_field="relevancy", sort_order="desc"):
230+
"""
231+
Builds a dynamic sort parameter for OpenSearch based on a single field and order.
232+
174233
Args:
175234
sort_field (str): The field to sort by (e.g., "relevancy", "date", "popularity", "title").
176235
Defaults to "relevancy" (_score) if not provided.

0 commit comments

Comments
 (0)