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