Spaces:
Sleeping
Sleeping
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']) | |