Spaces:
Sleeping
Sleeping
File size: 3,873 Bytes
57cf043 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
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'])
|