-
Notifications
You must be signed in to change notification settings - Fork 103
/
Copy pathparser.py
38 lines (32 loc) · 1.13 KB
/
parser.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from typing import Any, List, Optional
from engine.base_client.parser import BaseConditionParser, FieldValue
class ElasticConditionParser(BaseConditionParser):
def build_condition(
self, and_subfilters: Optional[List[Any]], or_subfilters: Optional[List[Any]]
) -> Optional[Any]:
return {
"bool": {
"must": and_subfilters,
"should": or_subfilters,
}
}
def build_exact_match_filter(self, field_name: str, value: FieldValue) -> Any:
return {"match": {field_name: value}}
def build_range_filter(
self,
field_name: str,
lt: Optional[FieldValue],
gt: Optional[FieldValue],
lte: Optional[FieldValue],
gte: Optional[FieldValue],
) -> Any:
return {"range": {field_name: {"lt": lt, "gt": gt, "lte": lte, "gte": gte}}}
def build_geo_filter(
self, field_name: str, lat: float, lon: float, radius: float
) -> Any:
return {
"geo_distance": {
"distance": f"{radius}m",
field_name: {"lat": lat, "lon": lon},
}
}