Rumah >pembangunan bahagian belakang >Tutorial Python >Cara menyambung ke kelompok AWS OpenSearch atau Elasticsearch menggunakan python

Cara menyambung ke kelompok AWS OpenSearch atau Elasticsearch menggunakan python

DDD
DDDasal
2024-12-20 20:49:13537semak imbas

How to connect to AWS OpenSearch or Elasticsearch clusters using python

Menyambung kepada perkhidmatan OpenSearch (ES) yang berjalan dalam AWS menggunakan Python adalah menyakitkan. Kebanyakan contoh yang saya temui dalam talian sama ada tidak berfungsi atau sudah lapuk, membuatkan saya sentiasa membetulkan isu yang sama. Untuk menjimatkan masa dan kekecewaan, berikut ialah koleksi coretan kod yang berfungsi, terkini setakat Disember 2024.

  • Sambung menggunakan perpustakaan opensearch-py (OpenSearch ElasticSearch)
  • Sambung menggunakan perpustakaan elasticsearch (ElasticSearch sahaja)
    • elasticsearch >= 8
    • elasticsearch < 8

Sambung menggunakan perpustakaan opensearch-py (OpenSearch ElasticSearch)

Ini ialah cara pilihan saya untuk menyambung ke tika ES yang diuruskan oleh AWS. Ia berfungsi untuk kedua-dua kelompok ElasticSearch dan OpenSearch, dan pengesahan boleh memanfaatkan profil AWS.

Pasang opensearch-py dan boto3 (untuk pengesahan):

pip install opensearch-py boto3

Pada masa penulisan, ini memasang opensearch-py==2.8.0 dan boto3==1.35.81.

Kini, anda boleh membuat pelanggan menggunakan yang berikut:

import boto3

from opensearchpy import (
    AWSV4SignerAuth,
    OpenSearch,
    RequestsHttpConnection,
)

es_host = "search-my-aws-esdomain-5k2baneoyj4vywjseocultv2au.eu-central-1.es.amazonaws.com"
aws_access_key = "AKIAXCUEGTAF3CV7GYKA"
aws_secret_key = "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"
region = "eu-central-1"

# Note: you can also use boto3.Session(profile_name="my-profile") or other ways
session = boto3.Session(
    aws_access_key_id=aws_access_key,
    aws_secret_access_key=aws_secret_key,
    region_name=region,
)

client = OpenSearch(
    hosts=[{"host": es_host, "port": 443}],
    http_auth=AWSV4SignerAuth(session.get_credentials(), region, "es"),
    connection_class=RequestsHttpConnection,
    use_ssl=True,
)

Perhatikan bahawa boto3.Session menyokong pelbagai cara untuk mencipta sesi: menggunakan profil, pembolehubah persekitaran dan banyak lagi. Saya akan benarkan anda menyemaknya!

Sebaik sahaja anda memilikinya, semak sambungan menggunakan:

client.ping() # should return True
client.info() # use this to get a proper error message if ping fails

Untuk menyemak indeks:

# List all indices
client.cat.indices()
client.indices.get("*")

# Check the existence of an indice
client.indices.exists("my-index")

Sambung menggunakan perpustakaan elasticsearch (ElasticSearch sahaja)

? Ini hanya berfungsi untuk kelompok ElasticSearch! Menyambung ke kluster OpenSearch meningkatkan

UnsupportedProductError: Pelanggan menyedari bahawa pelayan bukan Elasticsearch dan kami tidak menyokong produk yang tidak diketahui ini

elasticsearch >= 8

Kebanyakan coretan masih merujuk RequestsHttpConnection, kelas yang telah dialih keluar dalam elasticsearch 8.X. Jika anda mencari ralat tidak boleh mengimport nama 'RequestsHttpConnection' daripada 'elasticsearch', anda berada di tempat yang betul!

Pasang elasticsearch (ini harus memasang elastic-transport juga), dan requests_aws4auth . Yang terakhir, berdasarkan permintaan, diperlukan untuk mengendalikan pengesahan kepada AWS:

pip install elasticsearch requests-aws4auth

Pada masa penulisan, ini memasang elastic-transport==8.15.1, elasticsearch==8.17.0 dan requests-aws4auth==1.3.1.

Kini, anda boleh membuat pelanggan menggunakan yang berikut:

from elastic_transport import RequestsHttpNode
from elasticsearch import Elasticsearch
from requests_aws4auth import AWS4Auth

es_endpoint = "search-my-aws-esdomain-5k2baneoyj4vywjseocultv2au.eu-central-1.es.amazonaws.com"
aws_access_key = "AKIAXCUEGTAF3CV7GYKA"
aws_secret_key = "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"
region = "eu-central-1"

es = Elasticsearch(
    f"https://{es_host}",
    http_auth=AWS4Auth(
        aws_access_key, 
        aws_secret_key, 
        region,
        "es",
    ),
    verify_certs=True,
    node_class=RequestsHttpNode,
)

Sebaik sahaja anda memilikinya, semak sambungan menggunakan:

es.ping() # should return True
es.info() # use this to get a proper error message if ping fails

elasticsearch < 8

Jika anda masih menggunakan versi lama elasticsearch:

pip install "elasticsearch<8" requests-aws4auth

Pada masa ini elasticsearch==7.17.12, requests-aws4auth==1.3.1.

Kini, anda boleh membuat pelanggan menggunakan yang berikut:

pip install opensearch-py boto3

Periksa sambungan:

import boto3

from opensearchpy import (
    AWSV4SignerAuth,
    OpenSearch,
    RequestsHttpConnection,
)

es_host = "search-my-aws-esdomain-5k2baneoyj4vywjseocultv2au.eu-central-1.es.amazonaws.com"
aws_access_key = "AKIAXCUEGTAF3CV7GYKA"
aws_secret_key = "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"
region = "eu-central-1"

# Note: you can also use boto3.Session(profile_name="my-profile") or other ways
session = boto3.Session(
    aws_access_key_id=aws_access_key,
    aws_secret_access_key=aws_secret_key,
    region_name=region,
)

client = OpenSearch(
    hosts=[{"host": es_host, "port": 443}],
    http_auth=AWSV4SignerAuth(session.get_credentials(), region, "es"),
    connection_class=RequestsHttpConnection,
    use_ssl=True,
)

Atas ialah kandungan terperinci Cara menyambung ke kelompok AWS OpenSearch atau Elasticsearch menggunakan python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn