Skip to content

Commit 2f8d666

Browse files
committed
Extending datetime search to include start_datetime and end_datetime.
1 parent 61c01cb commit 2f8d666

File tree

1 file changed

+90
-8
lines changed

1 file changed

+90
-8
lines changed

stac_fastapi/elasticsearch/stac_fastapi/elasticsearch/database_logic.py

Lines changed: 90 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -388,18 +388,100 @@ def apply_datetime_filter(search: Search, datetime_search):
388388
Returns:
389389
Search: The filtered search object.
390390
"""
391+
should = []
392+
391393
if "eq" in datetime_search:
392-
search = search.filter(
393-
"term", **{"properties__datetime": datetime_search["eq"]}
394+
should.extend(
395+
[
396+
Q(
397+
"bool",
398+
filter=[
399+
Q(
400+
"term",
401+
properties__datetime=datetime_search["eq"],
402+
),
403+
],
404+
),
405+
Q(
406+
"bool",
407+
filter=[
408+
Q(
409+
"range",
410+
properties__start_datetime={
411+
"lte": datetime_search["eq"],
412+
},
413+
),
414+
Q(
415+
"range",
416+
properties__end_datetime={
417+
"gte": datetime_search["eq"],
418+
},
419+
),
420+
],
421+
),
422+
]
394423
)
424+
395425
else:
396-
search = search.filter(
397-
"range", properties__datetime={"lte": datetime_search["lte"]}
398-
)
399-
search = search.filter(
400-
"range", properties__datetime={"gte": datetime_search["gte"]}
426+
should.extend(
427+
[
428+
Q(
429+
"bool",
430+
filter=[
431+
Q(
432+
"range",
433+
properties__datetime={
434+
"gte": datetime_search["gte"],
435+
"lte": datetime_search["lte"],
436+
},
437+
),
438+
],
439+
),
440+
Q(
441+
"bool",
442+
filter=[
443+
Q(
444+
"range",
445+
properties__start_datetime={
446+
"gte": datetime_search["gte"],
447+
"lte": datetime_search["lte"],
448+
},
449+
),
450+
],
451+
),
452+
Q(
453+
"bool",
454+
filter=[
455+
Q(
456+
"range",
457+
properties__end_datetime={
458+
"gte": datetime_search["gte"],
459+
"lte": datetime_search["lte"],
460+
},
461+
),
462+
],
463+
),
464+
Q(
465+
"bool",
466+
filter=[
467+
Q(
468+
"range",
469+
properties__start_datetime={
470+
"lte": datetime_search["gte"]
471+
},
472+
),
473+
Q(
474+
"range",
475+
properties__end_datetime={
476+
"gte": datetime_search["lte"]
477+
},
478+
),
479+
],
480+
),
481+
]
401482
)
402-
return search
483+
484+
search = search.query(Q("bool", filter=[Q("bool", should=should)]))
403485

404486
@staticmethod
405487
def apply_bbox_filter(search: Search, bbox: List):

0 commit comments

Comments
 (0)