MCPcopy Create free account
hub / github.com/alephdata/aleph / Query

Class Query

aleph/search/query.py:30–310  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

28
29
30class Query(object):
31 TEXT_FIELDS = ["text"]
32 PREFIX_FIELD = "name"
33 SKIP_FILTERS = []
34 AUTHZ_FIELD = "collection_id"
35 HIGHLIGHT_FIELD = "text"
36 SORT_FIELDS = {
37 "label": "label.kw",
38 "score": "_score",
39 }
40 SORT_DEFAULT = ["_score"]
41 SOURCE = {}
42
43 def __init__(self, parser):
44 self.parser = parser
45
46 def get_text_query(self):
47 query = []
48 if self.parser.text:
49 qs = {
50 "query_string": {
51 "query": self.parser.text,
52 "lenient": True,
53 "fields": self.TEXT_FIELDS,
54 "default_operator": "AND",
55 "minimum_should_match": "66%",
56 }
57 }
58 query.append(qs)
59 if self.parser.prefix:
60 query.append(
61 {"match_phrase_prefix": {self.PREFIX_FIELD: self.parser.prefix}}
62 )
63 if not len(query):
64 query.append({"match_all": {}})
65 return query
66
67 def get_filters_list(self, skip):
68 filters = []
69 range_filters = dict()
70 for field, values in self.parser.filters.items():
71 if field in skip:
72 continue
73 # Collect all range query filters for a field in a single query
74 if field.startswith(("gt:", "gte:", "lt:", "lte:")):
75 op, field = field.split(":", 1)
76 if range_filters.get(field) is None:
77 range_filters[field] = {op: list(values)[0]}
78 else:
79 range_filters[field][op] = list(values)[0]
80 continue
81 filters.append(field_filter_query(field, values))
82
83 for field, ops in range_filters.items():
84 filters.append(range_filter_query(field, ops))
85
86 return filters
87

Callers 1

queryFunction · 0.90

Calls

no outgoing calls

Tested by 1

queryFunction · 0.72