@@ -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