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