From 444d1f51cce214caf1eb29703acd1d0bd28a59c7 Mon Sep 17 00:00:00 2001 From: Jack Robison Date: Thu, 24 Mar 2022 21:13:08 -0400 Subject: [PATCH] fix https://github.com/lbryio/lbry-sdk/issues/3561 --- scribe/elasticsearch/search.py | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/scribe/elasticsearch/search.py b/scribe/elasticsearch/search.py index 140a56e..7b77801 100644 --- a/scribe/elasticsearch/search.py +++ b/scribe/elasticsearch/search.py @@ -352,13 +352,37 @@ def expand_query(**kwargs): query['must'].append({"range": {key: {ops[operator]: value}}}) elif key in RANGE_FIELDS and isinstance(value, list) and all(v[0] in ops for v in value): range_constraints = [] + release_times = [] for v in value: operator_length = 2 if v[:2] in ops else 1 operator, stripped_op_v = v[:operator_length], v[operator_length:] if key == 'fee_amount': stripped_op_v = str(Decimal(stripped_op_v)*1000) - range_constraints.append((operator, stripped_op_v)) - query['must'].append({"range": {key: {ops[operator]: v for operator, v in range_constraints}}}) + if key == 'release_time': + release_times.append((operator, stripped_op_v)) + else: + range_constraints.append((operator, stripped_op_v)) + if key != 'release_time': + query['must'].append({"range": {key: {ops[operator]: v for operator, v in range_constraints}}}) + else: + query['must'].append( + {"bool": + {"should": [ + {"bool": { + "must_not": { + "exists": { + "field": "release_time" + } + } + }}, + {"bool": { + "must": [ + {"exists": {"field": "release_time"}}, + {'range': {key: {ops[operator]: v for operator, v in release_times}}}, + ]}}, + ]} + } + ) elif many: query['must'].append({"terms": {key: value}}) else: