generic-chatbot-backend / components /elastic /elasticsearch_client.py
muryshev's picture
init
57cf043
raw
history blame
3.87 kB
from elasticsearch import Elasticsearch
from common.common import get_elastic_query
class ElasticsearchClient:
def __init__(self,
host: str = 'localhost',
port: int = 9200,
scheme: str = 'http',
index_name='my_index',
answer=None):
"""
Инициализация клиента Elasticsearch и установка имени индекса.
Args:
host: Адрес хоста Elasticsearch
port:
scheme:
index_name: Название индекса, с которым будет работать клиент
"""
self.es = Elasticsearch([{'host': host, 'port': port, 'scheme': scheme}])
self.index_name = index_name
self.answer = answer
def set_index(self, index_name):
"""
Метод для изменения индекса.
Args:
index_name: Название индекса
"""
self.index_name = index_name
def search(self, query, size=10):
"""
Выполняет поиск по указанному запросу и возвращает результаты.
Args:
query: Запрос для поиска
size: Максимальное количество возвращаемых результатов
Returns:
Результаты поиска
"""
response = self.es.search(index=self.index_name, body=query, size=size)
return response['hits']['hits']
def create_document(self, doc_id, document):
"""
Создает новый документ в Elasticsearch.
Args:
doc_id: Данные документа
document: Идентификатор документа
"""
self.es.index(index=self.index_name, id=doc_id, body=document)
def get_document(self, doc_id):
"""
Получает документ по его идентификатору.
Args:
doc_id: Идентификатор документа
Returns:
Найденный документ
"""
return self.es.get(index=self.index_name, id=doc_id)
def delete_document(self, doc_id):
"""
Удаляет документ по его идентификатору.
Args:
doc_id: Идентификатор документа
"""
self.es.delete(index=self.index_name, id=doc_id)
def update_document(self, doc_id, document):
"""
Обновляет данные существующего документа.
Args:
doc_id: Идентификатор документа
document: Обновленные данные документа
"""
self.es.update(index=self.index_name, id=doc_id, body={"doc": document})
def indices(self):
return self.es.indices.exists(index=self.index_name)
# Пример использования
if __name__ == "__main__":
# Инициализация клиента Elasticsearch
es_client = ElasticsearchClient(index_name='people_search')
# Пример запроса для поиска по имени
search_query = {
"query": {
"match": {
"person_full_name": "Бизнес-куратором каких РОКС НН является Берлин А.В."
}
}
}
# Выполнение поиска и вывод результатов
results = es_client.search(query=get_elastic_query('Бизнес-куратором каких РОКС НН является Берлин А.В.'))
for result in results:
print(result['_source'])