すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:検索機能を実装するためのデモコード

最終更新日:Mar 06, 2025

このトピックでは、検索機能を実装するためのデモコードを提供します。

依存関係を追加する

pip install alibabacloud_tea_util 
pip install alibabacloud_opensearch_util
pip install alibabacloud_credentials

BaseRequest の詳細については、「Python クライアントのサンプルコード」をご参照ください。

環境変数を設定する

ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数と ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数を構成します。

重要
  • Alibaba Cloud アカウントの AccessKey ペアを使用すると、すべての API 操作にアクセスできます。API 操作の呼び出しや日常的な O&M の実行には、Resource Access Management (RAM) ユーザーを使用することをお勧めします。RAM ユーザーの使用方法については、「RAM ユーザーを作成する」をご参照ください。

  • AccessKey ペアの作成方法については、「AccessKey ペアを作成する」をご参照ください。

  • RAM ユーザーの AccessKey ペアを使用する場合は、Alibaba Cloud アカウントを使用して、AliyunServiceRoleForOpenSearch ロールに必要な権限が付与されていることを確認してください。詳細については、「AliyunServiceRoleForOpenSearch」および「アクセス認証ルール」をご参照ください。

  • プロジェクトコードなど、他の人が簡単にアクセスできる資料に AccessKey ペアを含めないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のリソースが安全でなくなる可能性があります。

  • Linux および macOS

    次のコマンドを実行します。<access_key_id> および <access_key_secret> を、使用する RAM ユーザーの AccessKey ID と AccessKey シークレットに置き換えます。

    export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> 
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
  • Windows

    1. 環境変数ファイルを作成し、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数をファイルに追加してから、環境変数に AccessKey ID と AccessKey シークレットを設定します。

    2. AccessKey ペアを有効にするには、Windows を再起動します。

サンプルコード

# -*- coding: utf-8 -*-

import time, os
from typing import Dict, Any

from Tea.exceptions import TeaException
from Tea.request import TeaRequest
from alibabacloud_tea_util import models as util_models

from BaseRequest import Config, Client


class opensearch:
    def __init__(self, config: Config):
        self.Clients = Client(config=config)
        self.runtime = util_models.RuntimeOptions(
            connect_timeout=10000,
            read_timeout=10000,
            autoretry=False,
            ignore_ssl=False,
            max_idle_conns=50,
            max_attempts=3
        )
        self.header={}

    def searchDoc(self, app_name: str, query_params: dict) -> Dict[str, Any]:
        try:
            response = self.Clients._request(method="GET", pathname=f'/v3/openapi/apps/{app_name}/search',
                                             query=query_params, headers = self.header, body=None, runtime=self.runtime)
            return response
        except TeaException as e:
            print(e)


if __name__ == "__main__":
    # OpenSearch API のエンドポイントを指定します。値には http:// プレフィックスは含まれません。
    endpoint = "<endpoint>"

    # リクエストプロトコルを指定します。有効な値:HTTPS および HTTP。
    endpoint_protocol = "HTTP"

    # AccessKey ペアを指定します。
    # 環境変数から AccessKey ID と AccessKey シークレットを取得します。
    # サンプルコードを実行する前に、環境変数を設定する必要があります。詳細については、このトピックの「環境変数を設定する」セクションを参照してください。
    access_key_id = os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_ID")
    access_key_secret = os.environ.get("ALIBABA_CLOUD_ACCESS_KEY_SECRET")

    # 認証方式を指定します。デフォルト値:access_key。sts の値は、Resource Access Management (RAM) と Security Token Service (STS) に基づく認証を示します。
    # 有効な値:sts および access_key。
    auth_type = "access_key"

    # RAM と STS に基づく認証を使用する場合は、security_token パラメーターを指定する必要があります。Alibaba Cloud RAM の AssumeRole 操作を呼び出して、STS トークンを取得できます。
    # security_token = "<security_token>"


    # 共通のリクエストパラメーターを指定します。
    # 注:security_token パラメーターと type パラメーターは、SDK を RAM ユーザーとして使用する必要がある場合にのみ必要です。
    Configs = Config(endpoint=endpoint, access_key_id=access_key_id, access_key_secret=access_key_secret,
                     security_token=security_token, type=auth_type, protocol=endpoint_protocol)



    # OpenSearch インスタンスを作成します。
    ops = opensearch(Configs)
    app_name = "appname"

    # --------------- ドキュメントを検索する ---------------
    
    docQuery = {
        "query": "config=start:0,hit:10,format:fulljson&&query=(default:\'opensearch\' AND default:\'OpenSearch\') OR (default:\'Full-text search\' AND default:\'Text parsing\')",
        "second_rank_name": "rank_name",
        "first_rank_name": "rank_name",
        "fetch": "qp:profile",
        "fetch_fields": "title",
    }

    res1 = ops.searchDoc(app_name=app_name, query_params=docQuery)
    print(res1)
説明

詳細については、「検索リクエストを開始する」をご参照ください。