From 7460b507b6f1014711c56cd4092d69af33b0ce4c Mon Sep 17 00:00:00 2001 From: dblock Date: Tue, 25 Jul 2023 12:27:24 -0400 Subject: [PATCH] The client can serialize an array for you. Signed-off-by: dblock --- guides/bulk.md | 19 +++++++++++ samples/bulk/bulk-array.py | 64 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100755 samples/bulk/bulk-array.py diff --git a/guides/bulk.md b/guides/bulk.md index da522408..ef6b8c5d 100644 --- a/guides/bulk.md +++ b/guides/bulk.md @@ -24,6 +24,25 @@ docs = ''' {"name": "baz"} ''' +response = client.bulk(docs) +if response["errors"]: + print(f"There were errors!") +else: + print(f"Bulk-inserted {len(rc['items'])} items.") +``` + +The client can also serialize an array of data into bulk-delimited JSON for you. See [samples/bulk/bulk-array.py](../samples/bulk/bulk-array.py) for a working sample. + +```python +data = [ + { "index": { "_index": "index-2022-06-08", "_id": 1 }} + { "name": "foo"} + { "index": { "_index": "index-2022-06-09", "_id": 2 }} + { "name": "bar"} + { "index": { "_index": "index-2022-06-10", "_id": 3 }} + { "name": "baz"} +] + response = client.bulk(data) if response["errors"]: print(f"There were errors!") diff --git a/samples/bulk/bulk-array.py b/samples/bulk/bulk-array.py new file mode 100755 index 00000000..8df6fa63 --- /dev/null +++ b/samples/bulk/bulk-array.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python + +# SPDX-License-Identifier: Apache-2.0 +# +# The OpenSearch Contributors require contributions made to +# this file be licensed under the Apache-2.0 license or a +# compatible open source license. + +import os +import json + +from opensearchpy import OpenSearch + +# connect to an instance of OpenSearch + +host = os.getenv('HOST', default='localhost') +port = int(os.getenv('PORT', 9200)) +auth = ( + os.getenv('USERNAME', 'admin'), + os.getenv('PASSWORD', 'admin') +) + +client = OpenSearch( + hosts = [{'host': host, 'port': port}], + http_auth = auth, + use_ssl = True, + verify_certs = False, + ssl_show_warn = False +) + +# check whether an index exists +index_name = "my-index" + +if not client.indices.exists(index_name): + + client.indices.create(index_name, + body={ + "mappings":{ + "properties": { + "value": { + "type": "float" + }, + } + } + } + ) + +# index data +data = [] +for i in range(100): + data.append({ "index": {"_index": index_name, "_id": i }}) + data.append({ "value": i }) + +rc = client.bulk(data) +if rc["errors"]: + print(f"There were errors:") + for item in rc["items"]: + print(f"{item['index']['status']}: {item['index']['error']['type']}") +else: + print(f"Bulk-inserted {len(rc['items'])} items.") + +# delete index +client.indices.delete(index=index_name) +