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']