29 lines
868 B
Python
29 lines
868 B
Python
|
from flask import current_app
|
||
|
|
||
|
|
||
|
def add_to_index(index, model):
|
||
|
if not current_app.elasticsearch:
|
||
|
return
|
||
|
payload = {}
|
||
|
for field in model.__searchable__:
|
||
|
payload[field] = getattr(model, field)
|
||
|
current_app.elasticsearch.index(index=index, id=model.id, document=payload)
|
||
|
|
||
|
|
||
|
def remove_from_index(index, model):
|
||
|
if not current_app.elasticsearch:
|
||
|
return
|
||
|
current_app.elasticsearch.delete(index=index, id=model.id)
|
||
|
|
||
|
|
||
|
def query_index(index, query, page, per_page):
|
||
|
if not current_app.elasticsearch:
|
||
|
return [], 0
|
||
|
search = current_app.elasticsearch.search(
|
||
|
index=index,
|
||
|
query={'multi_match': {'query': query, 'fields': ['*']}},
|
||
|
from_=(page - 1) * per_page,
|
||
|
size=per_page)
|
||
|
ids = [int(hit['_id']) for hit in search['hits']['hits']]
|
||
|
return ids, search['hits']['total']['value']
|