search.py
1.65 KB
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import typesense
TYPESENSE_API = open('./docs/typesense').read().strip()
client = typesense.Client({
'api_key': TYPESENSE_API,
'nodes': [{
'host': 'localhost',
'port': '8108',
'protocol': 'http'
}],
'connection_timeout_seconds': 2
})
COLLECTION = 'presup_actpro_fts'
schema = {
'name': COLLECTION,
'fields': [
{'name': 'gestion', 'type': 'int32', 'facet': True},
{'name': 'devengado', 'type': 'float'},
{'name': 'is_class', 'type': 'bool'},
{'name': 'class_', 'type': 'string'},
{'name': 'texto', 'type': 'string'},
{'name': 'metadatos', 'type': 'string'},
],
'default_sorting_field': 'devengado',
}
search_parameters = {
"q": "cuba",
"query_by": "texto",
# "facet_by": "gestion",
"sort_by": "devengado:desc",
"per_page": 20,
}
AVAILABLE_CLASSES = [
'programa_proyecto', 'entidad', 'objeto', 'finfun', 'acteco'
]
def do_search(query, page, is_class, class_=None, order=None):
search_parameters_ = search_parameters.copy()
search_parameters_['q'] = query
if is_class is not None:
filter_c = ''
if is_class:
filter_c = 'is_class:true'
else:
filter_c = 'is_class:false'
search_parameters_['filter_by'] = filter_c
if (class_ is not None):
class_ = [_ for _ in class_.split(',') if _ in AVAILABLE_CLASSES]
if len(class_):
search_parameters_['filter_by'] = 'class_:[{}]'.format(', '.join(class_))
if (page is not None) and (page > 0) and (page < 100):
search_parameters_['page'] = page
search_parameters_['sort_by'] = 'devengado:desc'
if order == 'asc':
search_parameters_['sort_by'] = 'devengado:asc'
return client.collections[COLLECTION].documents.search(
search_parameters_
)