OpenSearch предоставляет стандартные REST API и клиенты, разработанные с использованием Java и Python.
В этом разделе предоставлен пример кода на Python для создания векторных индексов, а также импорта и запросов векторных данных. Показано, как использовать клиент для реализации векторного поиска.
Пакет зависимостей Python установлен на клиенте. Если он не установлен, выполните следующую команду для установки:
# OpenSearch 2.19.0pip install opensearch-py==2.8.0# OpenSearch 1.3.6pip install opensearch-py==1.1.0
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394from opensearchpy import OpenSearch# Create a client.def get_client(hosts: list, user: str = None, password: str = None):if user and password:return OpenSearch(hosts, http_auth=(user, password), verify_certs=False, ssl_show_warn=False)else:return OpenSearch(hosts)# Создать таблицу индекса.def create(client: OpenSearch, index: str):# Информация о сопоставлении индексаindex_mapping = {"settings": {"index": {"vector": "true", # Включить векторную функцию."number_of_shards": 1, # Установите количество шардов индекса по мере необходимости."number_of_replicas": 0 # Установите количество реплик индекса по мере необходимости.}},"mappings": {"свойства": {"my_vector": {"тип": "вектор","размерность": 2,"индексация": True,"алгоритм": "GRAPH","метрика": "евклидовый"}# Другие поля могут быть добавлены при необходимости.}}}рез = клиент.индексы.создать(индекс=индекс, тело=отображение_индекса)печать("результат создания индекса: ", res)# Записать данные.def write(client: OpenSearch, index: str, vecs: list, bulk_size=500):for i in range(0, len(vecs), bulk_size):actions = ""for vec in vecs[i: i + bulk_size]:actions += '{"index": {"_index": "%s"}}\n' % индексдействия += '{"my_vector": %s}\n' % строка(вектор)клиент.массовый(тело=действия, request_timeout=3600)клиент.индексы.обновить(индекс=индекс, request_timeout=3600)печать("запись индекса успешна!")# Запрос векторного индекса.def поиск(клиент: OpenSearch, индекс: str, запрос: список, size: int):# Запрос. Выберите подходящий метод запроса.query_body = {"size": size,"запрос": {"вектор": {"my_vector": {"вектор": запрос,"topk": размер}}}}результат = клиент.поиск(индекс=индекс, тело=тело_запроса)print("результат поиска индекса: ", res)# Удалить индекс.def delete(client: OpenSearch, индекс: str):рез = клиент.индексы.удалить(индекс=индекс)print("удалить индекс результат: ", рез)если __name__ == '__main__':os_client = get_client(hosts=['http://xx.xx.xx.xx:9200'])# Для кластера в режиме безопасности, использующего HTTPS, выполните следующее:# os_client = get_client(hosts=['https://xx.xx.xx.xx:9200', 'https://xx.xx.xx.xx:9200'], user='xxxxx', password='xxxxx')# Для кластера в режиме безопасности с отключённым HTTPS выполните следующее:# os_client = get_client(hosts=['http://xx.xx.xx.xx:9200', 'http://xx.xx.xx.xx:9200'], user='xxxxx', password='xxxxx')# Проверьте имя индекса.index_name = "my_index"# Создайте индекс.create(os_client, index=index_name)# Записать данные.data = [[1.0, 1.0], [2.0, 2.0], [3.0, 3.0]]write(os_client, index=index_name, vecs=data)# Запрос к индексу.query_vector = [1.0, 1.0]search(os_client, index=index_name, запрос=query_vector, размер=3)# Удалить индекс.удалить(os_client, индекс=index_name)