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

Artificial Intelligence Recommendation:Java SDK リファレンス

最終更新日:Mar 01, 2026

Java SDK を使用した RecallEngine の操作

本トピックでは、Java SDK を使用して RecallEngine でデータ取得および書き込み操作を実行する方法について説明します。

前提条件

  • 検索エンジンのインスタンスを作成済みであり、そのエンドポイント、インスタンス ID、ユーザー名、パスワードを取得済みである。

  • ターゲットテーブルおよびリコールサービスを RecallEngine で作成してください。

Java SDK のインストール

Maven プロジェクトの pom.xml ファイルに、以下の依存関係を追加します。

<dependency>
  <groupId>com.aliyun.openservices.aiservice</groupId>
  <artifactId>pairec-sdk</artifactId>
  <version>1.0.7</version>
</dependency>

RecallEngine クライアントの初期化

API

RecallEngineClient client = new RecallEngineClient(endpoint, username, password);

パラメーターの説明

パラメーター

説明

endpoint

http://ep-xxxxxx.aliyuncs.com

RecallEngine サービスのエンドポイント。

username

System.getenv("RECALL_ENGINE_SERVICE_USERNAME")

認証用ユーザー名を環境変数から取得します。

password

System.getenv("RECALL_ENGINE_SERVICE_PASSWORD")

認証用パスワードを環境変数から取得します。

RecallEngine サービスのエンドポイントは、PAI-Rec コンソールの「リコール管理」>「基本情報」ページで確認できます。

{77ABF890-68EE-49E5-93F5-02CF998BB9C4}

オプションの構成方法

メソッド

説明

withRetryTimes(int retryTimes)

失敗したリクエストに対するリトライ回数を設定します。デフォルト値は 0(リトライなし)です。

withHttpClient(OkHttpClient httpClient)

接続プールやタイムアウトなどのパラメーターを構成するためのカスタム OkHttpClient インスタンスを設定します。

注記

  • クライアントのデフォルト接続タイムアウトは 200 ms、読み取り/書き込みタイムアウトは 500 ms、接続プール内の最大接続数は 1,000 です。

  • すべてのオプション構成メソッドは、チェーン呼び出しをサポートしています。

import com.aliyun.openservices.pairec.recallengine.RecallEngineClient;

// 認証情報を環境変数から取得
String endpoint = System.getenv("RECALL_ENGINE_SERVICE_ENDPOINT");
String username = System.getenv("RECALL_ENGINE_SERVICE_USERNAME");
String password = System.getenv("RECALL_ENGINE_SERVICE_PASSWORD");

// クライアントの作成
RecallEngineClient client = new RecallEngineClient(endpoint, username, password);

// リトライ回数の設定
client.withRetryTimes(2);

データの取得

API

public RecallResponse recall(RecallRequest request) throws RecallEngineException;

RecallRequest のパラメーター説明

パラメーター

JSON プロパティ名

説明

instanceId

instance_id

String

RecallEngine のインスタンス ID。

service

service

String

リコールサービス名。

version

version

String

リコールサービスのバージョン。

uid

uid

String

ユーザー ID。

recalls

recalls

Map<String, RecallConf>

リコール構成セット。キーはリコール名、値はリコール構成です。

requestId

request_id

String

リクエスト ID(任意)。

exposureList

exposure_list

String

公開リスト(任意)。公開済みコンテンツのフィルタリングに使用されます。

contextParams

context_params

Map<String, Object>

コンテキストパラメーター(任意)。カスタムコンテキスト情報を渡すために使用されます。

debug

debug

boolean

デバッグモードを有効にするかどうか(任意)。デフォルト値は false です。

RecallConf のパラメーター説明

パラメーター

説明

trigger

String

トリガー項目。リコールのトリガー値です。

count

int

返却されるリコール結果の期待件数。

RecallResponse の説明

メソッド

戻り値の型

説明

getResult()

Record

リコール結果のレコードセットを取得します。

import com.aliyun.openservices.pairec.recallengine.*;

import java.util.HashMap;
import java.util.Map;

// リコールリクエストの構築
RecallRequest request = new RecallRequest();
request.setInstanceId("your-instance-id");
request.setService("recall_test");
request.setVersion("V1");
request.setUid("123");

// リコール構成の設定
Map<String, RecallConf> recalls = new HashMap<>();
recalls.put("u2i_recall", new RecallConf("123", 100));
request.setRecalls(recalls);

// リコールの実行
RecallResponse resp = client.recall(request);
Record result = resp.getResult();

// 結果情報の取得
System.out.println("総件数: " + result.size());
System.out.println("フィールド名: " + result.fieldNames());

データの書き込み

API

public WriteResponse write(String instanceId, String table, WriteRequest request) throws RecallEngineException;

パラメーターの説明

パラメーター

説明

instanceId

String

RecallEngine のインスタンス ID。

table

String

対象テーブル名。

request

WriteRequest

書き込みリクエストオブジェクト。

WriteRequest のパラメーター説明

パラメーター

JSON プロパティ名

説明

requestId

request_id

String

リクエスト ID(任意)。

content

content

List<Map<String, Object>>

書き込むデータ内容。各 Map は 1 行のデータを表し、キーはフィールド名、値はフィールド値です。

versionId

versionId

String

バージョン ID(任意)。

WriteResponse の説明

WriteResponse は Response を継承しており、以下のフィールドを含みます。

メソッド

戻り値の型

説明

getRequestId()

String

リクエスト ID。

getCode()

String

状態コード。「OK」が成功時の戻り値です。

getMessage()

String

応答メッセージ。

getData()

Map<String, Object>

応答データ。

import com.aliyun.openservices.pairec.recallengine.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

// 書き込みリクエストの構築
WriteRequest request = new WriteRequest();
request.setRequestId("write-req-123");

// 書き込むデータの構築
Map<String, Object> item = new HashMap<>();
item.put("user_id", "123");
item.put("item_id", "item_123");
item.put("score", 0.95);

List<Map<String, Object>> content = new ArrayList<>();
content.add(item);
request.setContent(content);

// 書き込みの実行
WriteResponse resp = client.write("your-instance-id", "u2i_table", request);

// 書き込み結果の確認
System.out.println("状態コード: " + resp.getCode());       // 成功時は「OK」が返されます
System.out.println("メッセージ: " + resp.getMessage());

リコール結果(Record)の操作

RecallResponse.getResult() メソッドは Record オブジェクトを返します。このオブジェクトは、リコール結果のソート、フィルター、件数制限、処理を行うための一連のチェーン呼び出し可能な操作メソッドを提供します。

API

public Record sort(String name, boolean desc);
public Record retain(int count);
public Record filter(String name);
public Record filterByColumnValue(String name, Predicate<Object> predicate);
public Record filterByValues(Predicate<Map<String, Object>> predicate);
public Record random();
public List<Object> columnValues(String columnName);
public List<String> columnValuesString(String columnName);
public List<String> fieldNames();
public int size();

メソッドの説明

メソッド

説明

sort(name, desc)

指定されたカラムで並べ替えます。desc が true の場合、降順;false の場合、昇順で並べ替えます。

retain(count)

先頭の count 件のレコードを保持します。

filter(name)

指定されたカラムで重複を除去します。

filterByColumnValue(name, predicate)

指定されたカラムの値に基づいてフィルター処理を行い、述語を満たすレコードのみを保持します。

filterByValues(predicate)

全行データに基づいてフィルター処理を行います。述語は各行ごとに Map<String, Object> を受け取ります。

random()

レコードをランダムにシャッフルします。

columnValues(columnName)

指定されたカラムのすべての値を取得します。

columnValuesString(columnName)

指定されたカラムのすべての空でない文字列値を取得します。

fieldNames()

すべてのフィールド名を取得します。

size()

現在のレコード件数を取得します。

注記

  • sortretainfilterfilterByColumnValuefilterByValues、および random メソッドは、すべてチェーン呼び出しをサポートするために this を返します。

  • Record はスレッドセーフではありません。マルチスレッド環境では、同じ `Record` インスタンスを同時に操作しないでください。

RecallResponse resp = client.recall(request);
Record result = resp.getResult();

// score カラムで降順ソート → item_id で重複除去 → 先頭 10 件を取得
Record processed = result
        .sort("score", true)
        .filter("item_id")
        .retain(10);

System.out.println("処理後の件数: " + processed.size());

// item_id カラムのすべての値を取得
List<String> itemIds = processed.columnValuesString("item_id");
System.out.println("アイテム ID: " + itemIds);

// 条件付きフィルター:score > 0.5 のみを保持
Record filtered = result.filterByColumnValue("score", value -> {
    if (value instanceof Number) {
        return ((Number) value).doubleValue() > 0.5;
    }
    return false;
});

// 全行条件によるフィルター
Record filtered2 = result.filterByValues(row -> {
    Object category = row.get("category");
    return category != null && "video".equals(category.toString());
});

完全なサンプルコード

以下は、リコールおよび書き込み操作の完全なサンプルコードです。

import com.aliyun.openservices.pairec.recallengine.*;

import java.util.*;

public class RecallEngineDemo {

    public static void main(String[ ] args) throws RecallEngineException {

        // 1. クライアントの初期化
        String endpoint = System.getenv("RECALL_ENGINE_SERVICE_ENDPOINT");
        String username = System.getenv("RECALL_ENGINE_SERVICE_USERNAME");
        String password = System.getenv("RECALL_ENGINE_SERVICE_PASSWORD");

        RecallEngineClient client = new RecallEngineClient(endpoint, username, password);
        client.withRetryTimes(2);

        String instanceId = System.getenv("INSTANCE_ID");

        // 2. データの書き込み
        WriteRequest writeRequest = new WriteRequest();
        writeRequest.setRequestId("write-req-001");

        List<Map<String, Object>> content = new ArrayList<>();
        Map<String, Object> item = new HashMap<>();
        item.put("user_id", "123");
        item.put("item_id", "item_456");
        item.put("score", 0.95);
        content.add(item);
        writeRequest.setContent(content);

        WriteResponse writeResp = client.write(instanceId, "u2i_table", writeRequest);
        System.out.println("書き込み結果: " + writeResp.getCode());

        // 3. データの取得
        RecallRequest recallRequest = new RecallRequest();
        recallRequest.setInstanceId(instanceId);
        recallRequest.setService("recall_test");
        recallRequest.setVersion("V1");
        recallRequest.setUid("123");

        Map<String, RecallConf> recalls = new HashMap<>();
        recalls.put("u2i_recall", new RecallConf("123", 100));
        recallRequest.setRecalls(recalls);

        RecallResponse recallResp = client.recall(recallRequest);
        Record result = recallResp.getResult();

        // 4. リコール結果の処理
        System.out.println("総件数: " + result.size());
        System.out.println("フィールド名: " + result.fieldNames());

        // score で降順ソートし、先頭 10 件を取得
        Record top10 = result.sort("score", true).retain(10);
        System.out.println("上位 10 件: " + top10.toString());

        // アイテム ID のリストを取得
        List<String> itemIds = top10.columnValuesString("item_id");
        System.out.println("上位 10 件のアイテム ID: " + itemIds);
    }
}

エラー処理

すべてのリコールおよび書き込み操作は、RecallEngineException をスローする可能性があります。これらの操作を呼び出す際には、例外をキャッチする必要があります。

try {
    RecallResponse resp = client.recall(request);
    // 結果の処理
} catch (RecallEngineException e) {
    System.err.println("リコールに失敗しました: " + e.getMessage());
}