Skip to content

Commit bb64e21

Browse files
Yuri ZmytrakovYuri Zmytrakov
authored andcommitted
roll back elastic search
1 parent ce7e032 commit bb64e21

File tree

1 file changed

+44
-93
lines changed

1 file changed

+44
-93
lines changed

stac_fastapi/elasticsearch/stac_fastapi/elasticsearch/database_logic.py

Lines changed: 44 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
from stac_fastapi.core.base_database_logic import BaseDatabaseLogic
1919
from stac_fastapi.core.serializers import CollectionSerializer, ItemSerializer
20-
from stac_fastapi.core.utilities import bbox2polygon, get_bool_env, get_max_limit
20+
from stac_fastapi.core.utilities import bbox2polygon, get_max_limit
2121
from stac_fastapi.elasticsearch.config import AsyncElasticsearchSettings
2222
from stac_fastapi.elasticsearch.config import (
2323
ElasticsearchSettings as SyncElasticsearchSettings,
@@ -294,94 +294,21 @@ def apply_datetime_filter(
294294
if not datetime_search:
295295
return search, datetime_search
296296

297-
# USE_DATETIME env var
298-
# True: Search by datetime, if null search by start/end datetime
299-
# False: Always search only by start/end datetime
300-
USE_DATETIME = get_bool_env("USE_DATETIME", default=True)
301-
302-
if USE_DATETIME:
303-
if "eq" in datetime_search:
304-
# For exact matches, include:
305-
# 1. Items with matching exact datetime
306-
# 2. Items with datetime:null where the time falls within their range
307-
should = [
308-
Q(
309-
"bool",
310-
filter=[
311-
Q("exists", field="properties.datetime"),
312-
Q(
313-
"term",
314-
**{"properties__datetime": datetime_search["eq"]},
315-
),
316-
],
317-
),
318-
Q(
319-
"bool",
320-
must_not=[Q("exists", field="properties.datetime")],
321-
filter=[
322-
Q("exists", field="properties.start_datetime"),
323-
Q("exists", field="properties.end_datetime"),
324-
Q(
325-
"range",
326-
properties__start_datetime={
327-
"lte": datetime_search["eq"]
328-
},
329-
),
330-
Q(
331-
"range",
332-
properties__end_datetime={"gte": datetime_search["eq"]},
333-
),
334-
],
335-
),
336-
]
337-
else:
338-
# For date ranges, include:
339-
# 1. Items with datetime in the range
340-
# 2. Items with datetime:null that overlap the search range
341-
should = [
342-
Q(
343-
"bool",
344-
filter=[
345-
Q("exists", field="properties.datetime"),
346-
Q(
347-
"range",
348-
properties__datetime={
349-
"gte": datetime_search["gte"],
350-
"lte": datetime_search["lte"],
351-
},
352-
),
353-
],
354-
),
355-
Q(
356-
"bool",
357-
must_not=[Q("exists", field="properties.datetime")],
358-
filter=[
359-
Q("exists", field="properties.start_datetime"),
360-
Q("exists", field="properties.end_datetime"),
361-
Q(
362-
"range",
363-
properties__start_datetime={
364-
"lte": datetime_search["lte"]
365-
},
366-
),
367-
Q(
368-
"range",
369-
properties__end_datetime={
370-
"gte": datetime_search["gte"]
371-
},
372-
),
373-
],
374-
),
375-
]
376-
377-
return (
378-
search.query(Q("bool", should=should, minimum_should_match=1)),
379-
datetime_search,
380-
)
381-
else:
382-
if "eq" in datetime_search:
383-
filter_query = Q(
297+
if "eq" in datetime_search:
298+
# For exact matches, include:
299+
# 1. Items with matching exact datetime
300+
# 2. Items with datetime:null where the time falls within their range
301+
should = [
302+
Q(
303+
"bool",
304+
filter=[
305+
Q("exists", field="properties.datetime"),
306+
Q("term", **{"properties__datetime": datetime_search["eq"]}),
307+
],
308+
),
309+
Q(
384310
"bool",
311+
must_not=[Q("exists", field="properties.datetime")],
385312
filter=[
386313
Q("exists", field="properties.start_datetime"),
387314
Q("exists", field="properties.end_datetime"),
@@ -394,10 +321,29 @@ def apply_datetime_filter(
394321
properties__end_datetime={"gte": datetime_search["eq"]},
395322
),
396323
],
397-
)
398-
else:
399-
filter_query = Q(
324+
),
325+
]
326+
else:
327+
# For date ranges, include:
328+
# 1. Items with datetime in the range
329+
# 2. Items with datetime:null that overlap the search range
330+
should = [
331+
Q(
400332
"bool",
333+
filter=[
334+
Q("exists", field="properties.datetime"),
335+
Q(
336+
"range",
337+
properties__datetime={
338+
"gte": datetime_search["gte"],
339+
"lte": datetime_search["lte"],
340+
},
341+
),
342+
],
343+
),
344+
Q(
345+
"bool",
346+
must_not=[Q("exists", field="properties.datetime")],
401347
filter=[
402348
Q("exists", field="properties.start_datetime"),
403349
Q("exists", field="properties.end_datetime"),
@@ -410,8 +356,13 @@ def apply_datetime_filter(
410356
properties__end_datetime={"gte": datetime_search["gte"]},
411357
),
412358
],
413-
)
414-
return search.query(filter_query), datetime_search
359+
),
360+
]
361+
362+
return (
363+
search.query(Q("bool", should=should, minimum_should_match=1)),
364+
datetime_search,
365+
)
415366

416367
@staticmethod
417368
def apply_bbox_filter(search: Search, bbox: List):

0 commit comments

Comments
 (0)