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

OpenSearch:クエリ分析機能の実装のためのデモコード

最終更新日:Dec 28, 2024

環境変数の設定

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を再起動します。

OpenSearch SDK for Java V3.1.3 を使用したクエリ分析機能を実装するためのデモコード

package com.aliyun.opensearch;

import com.alibaba.fastjson.JSONArray;
import com.aliyun.opensearch.sdk.dependencies.com.google.common.collect.Lists;
import com.aliyun.opensearch.sdk.dependencies.org.json.JSONObject;
import com.aliyun.opensearch.sdk.generated.OpenSearch;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchException;
import com.aliyun.opensearch.sdk.generated.search.Config;
import com.aliyun.opensearch.sdk.generated.search.SearchFormat;
import com.aliyun.opensearch.sdk.generated.search.SearchParams;
import com.aliyun.opensearch.sdk.generated.search.general.SearchResult;
import com.aliyun.opensearch.search.SearchParamsBuilder;
import com.aliyun.opensearch.search.SearchResultDebug;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;

public class testQueryProcessor {

    private static String appName = "Name of the OpenSearch application that you want to manage"; // 管理対象のOpenSearchアプリケーションの名前
    private static String host = "Endpoint of the OpenSearch API in your region"; // リージョンのOpenSearch APIのエンドポイント

    public static void main(String[] args) {
      
      	// Specify your AccessKey pair.
        // AccessKeyペアを指定します。
        // Obtain the AccessKey ID and AccessKey secret from the environment variables. You must configure the environment variables before you run the sample code.
        // 環境変数からAccessKey IDとAccessKeyシークレットを取得します。サンプルコードを実行する前に、環境変数を設定する必要があります。
        String accesskey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String secret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

        // Obtain the file encoding format and default encoding format.
        // ファイルのエンコーディング形式とデフォルトのエンコーディング形式を取得します。
        System.out.println(String.format("file.encoding: %s", System.getProperty("file.encoding")));
        System.out.println(String.format("defaultCharset: %s", Charset.defaultCharset().name()));

        // Create an OpenSearch object.
        // OpenSearchオブジェクトを作成します。
        OpenSearch openSearch = new OpenSearch(accesskey, secret, host);

        // Use the OpenSearch object as a parameter to create an OpenSearchClient object.
        // OpenSearchオブジェクトをパラメーターとして使用して、OpenSearchClientオブジェクトを作成します。
        OpenSearchClient serviceClient = new OpenSearchClient(openSearch);

        // Use the OpenSearchClient object as a parameter to create a SearcherClient object.
        // OpenSearchClientオブジェクトをパラメーターとして使用して、SearcherClientオブジェクトを作成します。
        SearcherClient searcherClient = new SearcherClient(serviceClient);

        // Create a Config object and use the config clause to configure parameters such as the application name, paging-related parameters, and data format of returned results.
        // Configオブジェクトを作成し、config句を使用して、アプリケーション名、ページング関連のパラメーター、返される結果のデータ形式などのパラメーターを設定します。
        Config config = new Config(Lists.newArrayList(appName));
        config.setStart(0);
        config.setHits(5);
        // Specify the data format of return results. OpenSearch SDK for Java V3.1.2 supports XML and JSON but not FULLJSON. The FULLJSON format is supported by OpenSearch SDK for Java V3.1.3.
        // 戻り値のデータ形式を指定します。OpenSearch SDK for Java V3.1.2はXMLとJSONをサポートしていますが、FULLJSONはサポートしていません。FULLJSON形式はOpenSearch SDK for Java V3.1.3でサポートされています。
        config.setSearchFormat(SearchFormat.FULLJSON);

        // Create a SearchParams object.
        // SearchParamsオブジェクトを作成します。
        SearchParams searchParams = new SearchParams(config);

        // Specify the query clause. You can specify multiple keywords to perform a query based on multiple index fields. In this case, you must specify the index fields in one setQuery call. If you specify each index field in a separate setQuery call, the last clause overwrites the preceding clauses.
        // クエリ句を指定します。複数のキーワードを指定して、複数のインデックスフィールドに基づいてクエリを実行できます。この場合、1つのsetQuery呼び出しでインデックスフィールドを指定する必要があります。個別のsetQuery呼び出しで各インデックスフィールドを指定すると、最後の句が前の句を上書きします。
        searchParams.setQuery("name:'kfc'");// If the query keyword is kfc, the return results are the documents that are related to KFC.
        // クエリキーワードがkfcの場合、戻り値はKFCに関連するドキュメントです。

        List<String> qpname = new ArrayList<String>();
        qpname.add("qptest");  // Set a name for the query analyzer.
        // クエリアナライザの名前を設定します。
        searchParams.setQueryProcessorNames(qpname);

        // Create a SearchParamsBuilder object. As the utility class of SearchParams, the SearchParamsBuilder class allows you to configure query-related parameters with ease.
        // SearchParamsBuilderオブジェクトを作成します。SearchParamsのユーティリティクラスとして、SearchParamsBuilderクラスを使用すると、クエリ関連のパラメーターを簡単に設定できます。
        SearchParamsBuilder paramsBuilder = SearchParamsBuilder.create(searchParams);

        // Run the query and return the results.
        // クエリを実行して結果を返します。
        SearchResult searchResult;
        try {
            searchResult = searcherClient.execute(paramsBuilder);
            String result = searchResult.getResult();

            JSONObject obj = new JSONObject(result);

            // Determine whether an error has occurred. If no error has occurred, the search results are returned. If an error has occurred, the following code is run:
            // エラーが発生したかどうかを判断します。エラーが発生していない場合は、検索結果が返されます。エラーが発生した場合は、次のコードが実行されます。
            if(obj.get("errors").toString().length()>2){
                JSONArray jsonarr = JSONArray.parseArray(obj.get("errors").toString());
                System.out.println("error code:"+jsonarr.getJSONObject(0).get("code"));
                System.out.println("error message:"+jsonarr.getJSONObject(0).get("message"));
            }else{
                // Display the search results.
                // 検索結果を表示します。
                System.out.println("output:"+obj.toString());
                // You may need the information about request addresses for debugging.
                // デバッグのためにリクエストアドレスの情報が必要になる場合があります。
                SearchResultDebug srd = searcherClient.executeDebug(searchParams);
                System.out.println(srd.getRequestUrl().toString());
            }

        } catch (OpenSearchException e) {
            e.printStackTrace();
        } catch (OpenSearchClientException e) {
            e.printStackTrace();
        }

    }
}