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

Tablestore:ネストされたクエリ

最終更新日:May 07, 2026

ネストされたクエリを実行することで、ネスト型フィールドの子行に格納されたデータをクエリできます。ネストされたフィールドは直接クエリできません。ネストされたフィールドをクエリするには、NestedQuery オブジェクト内でネストされたフィールドのパスとサブクエリを指定する必要があります。サブクエリのタイプは任意です。

重要
  • ネストされたクエリでは、ネスト型フィールドのみをクエリできます。

  • 単一のリクエストで、ネスト型フィールドおよび他のタイプのフィールドに対して同時にクエリを実行できます。ネスト型フィールドの詳細については、「ネストされたデータ型」をご参照ください。

API オペレーション

ネストされたクエリを実行するには、Search または ParallelScan オペレーションを呼び出し、クエリタイプを NestedQuery に設定します。

パラメーター

パラメーター

説明

path

ネストされたフィールドのパス。このパスはツリー構造に似ています。たとえば、news.title は news という名前のネストされたフィールド内の title サブフィールドを指定します。

query

ネストされたフィールドのサブフィールドに対して実行するクエリ。クエリタイプは任意です。

scoreMode

フィールドに複数の値が含まれる場合にスコアを計算するために使用される値。

getTotalCount

クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値は false で、この場合、クエリ条件を満たす行の総数は返されません。

このパラメーターを true に設定すると、クエリのパフォーマンスが低下します。

weight

BM25 ベースのキーワード関連スコアを計算するために、クエリ対象フィールドに割り当てる重み。このパラメーターは全文検索のシナリオで使用されます。重みを高く設定すると、そのフィールドの BM25 ベースのキーワード関連スコアが高くなります。このパラメーターの値は正の浮動小数点数です。

このパラメーターは返される行数には影響しませんが、クエリ結果の BM25 ベースのキーワード関連スコアには影響します。

tableName

データテーブルの名前。

indexName

検索インデックスの名前。

columnsToGet

クエリ条件を満たす各行のすべての列を返すかどうかを指定します。このパラメーターでは、returnAll パラメーターおよび columns パラメーターを設定できます。

returnAll パラメーターのデフォルト値は false で、この場合、すべての列は返されません。このとき、columns パラメーターを使用して返す列を指定できます。返す列を指定しない場合、プライマリキー列のみが返されます。

returnAll パラメーターを true に設定すると、すべての列が返されます。

InnerHits

ネストされたフィールドのサブフィールドの設定。

  • sort:ネストされたフィールドの子行に対するソートルール。

  • offset:ネストされたフィールドに複数の子行が含まれる場合に返す子行の開始位置。

  • limit:ネストされたフィールドに複数の子行が含まれる場合に返す子行の最大数。デフォルト値は 3 です。

  • highlight:ネストされたフィールドのサブフィールドに対するハイライト設定。詳細については、「ハイライト」をご参照ください。

方法

Tablestore コンソールまたは Tablestore SDK を使用して、ネストされたクエリを実行できます。ネストされたクエリを実行する前に、以下の事前準備を完了させてください。

  • Tablestore の操作権限を持つ Alibaba Cloud アカウントまたは RAM ユーザーが作成されていること。RAM ユーザーに Tablestore の操作権限を付与する方法の詳細については、「RAM ポリシーを使用した RAM ユーザーへの権限付与」をご参照ください。

    Tablestore SDK を使用してネストされたクエリを実行する場合は、ご利用の Alibaba Cloud アカウントまたは RAM ユーザー用に AccessKey ペアを作成してください。詳細については、「AccessKey ペアの作成」をご参照ください。

    警告

    Alibaba Cloud アカウントの AccessKey ペアには、すべての API オペレーションに対する権限があります。API オペレーションの呼び出しや日常的な運用管理 (O&M) には、RAM ユーザーを使用することを推奨します。また、AccessKey ID および AccessKey Secret をプロジェクトコード内にハードコードしないでください。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが損なわれる可能性があります。

  • データテーブルが作成されていること。詳細については、「データテーブルの操作」をご参照ください。

  • データテーブルに対して検索インデックスが作成されます。詳細については、「検索インデックスを作成する」をご参照ください。

  • Tablestore SDK を使用してネストされたクエリを実行する場合は、OTSClient インスタンスが初期化されていること。詳細については、「OTSClient インスタンスの初期化」をご参照ください。

Tablestore コンソールの使用

Tablestore コンソールを使用してネストされたクエリを実行する場合、単一レベルのネスト型フィールドのデータのみをクエリできます。

  1. インデックス管理 タブに移動します。

    1. Tablestore コンソールにログインします。

    2. 上部のナビゲーションバーで、リソースグループとリージョンを選択します。

    3. 概要 ページで、インスタンス名をクリックするか、操作 列の インスタンス管理 をクリックします。

    4. インスタンスの詳細 タブの データテーブル一覧 タブで、データテーブル名をクリックするか、操作列の インデックス管理 をクリックします。

  2. [インデックス管理] タブで、対象の検索インデックスを見つけ、[操作] 列の [検索] をクリックします。

  3. 検索 ダイアログボックスで、データをクエリします。

    1. デフォルトでは、すべての列が返されます。特定の列のみを返す場合は、すべての列を取得 をオフにして、列名をカンマ区切りで入力します。

      説明

      デフォルトでは、Tablestore はデータテーブルのプライマリキー列を返します。

    2. 論理演算子を選択します:AndOr、または Not

      And を選択すると、すべての指定条件を満たすデータが返されます。Or を選択すると、少なくとも 1 つの指定条件を満たすデータが返されます。Not を選択すると、指定条件を満たさないデータが返されます。

    3. ネスト型フィールドを選択し、追加 をクリックします。

    4. サブフィールドを選択し、クエリタイプを希望のタイプ(例:TermQuery)に設定して、クエリする値を入力します。

    5. デフォルトでは、ソートは無効になっています。結果を特定のフィールドでソートする場合は、ソートを有効化 をオンにして、ソートフィールドを追加し、ソート順を設定します。

    6. デフォルトでは、集約は無効になっています。特定のフィールドに対して統計集約を実行する場合は、集約を有効化 をオンにして、集約対象フィールドを追加し、集約設定を構成します。

  4. OK をクリックします。

    クエリ結果は インデックス管理 タブに表示されます。

Tablestore SDK の使用

SDK を使用して、単一レベルおよび複数レベルのネスト型フィールド内のデータをクエリできます。ネストされたクエリを実行する際には、ハイライト機能を使用して結果内のキーワードをハイライト表示できます。ハイライトの詳細については、「ハイライト」をご参照ください。

ネストされたクエリを実行できる Tablestore SDK は次のとおりです:Tablestore SDK for JavaTablestore SDK for GoTablestore SDK for PythonTablestore SDK for Node.jsTablestore SDK for .NET、および Tablestore SDK for PHP。ここでは、Tablestore SDK for Java を使用した例を示します。

単一レベルのネストされたクエリの例

次の例は、`col_nested.nested_1` の値が `tablestore` であるデータをクエリする方法を示しています。この例では、`col_nested` はネストされたフィールドであり、その子行には `nested_1` 列および `nested_2` 列が含まれます。

private static void nestedQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    NestedQuery nestedQuery = new NestedQuery(); // クエリタイプを NestedQuery に設定します。
    nestedQuery.setPath("col_nested"); // ネストされた列のパスを設定します。
    TermQuery termQuery = new TermQuery(); // NestedQuery のサブクエリを構築します。
    termQuery.setFieldName("col_nested.nested_1"); // 列名を設定します。ネストされた列のパスを含むことに注意してください。
    termQuery.setTerm(ColumnValue.fromString("tablestore")); // クエリする値を設定します。
    nestedQuery.setQuery(termQuery);
    nestedQuery.setScoreMode(ScoreMode.None);
    searchQuery.setQuery(nestedQuery);
    //searchQuery.setGetTotalCount(true); // 一致した行の総数を返すように設定します。

    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
    // columnsToGet パラメーターを使用して、返す列を指定するか、すべての列を返すように設定します。このパラメーターを設定しない場合、デフォルトでプライマリキー列のみが返されます。
    //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    //columnsToGet.setReturnAll(true); // すべての列を返すように設定します。
    //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // 指定した列を返すように設定します。
    //searchRequest.setColumnsToGet(columnsToGet);

    SearchResponse resp = client.search(searchRequest);
    //System.out.println("TotalCount: " + resp.getTotalCount()); // 返された行数ではなく、一致した行の総数を出力します。
    System.out.println("Row: " + resp.getRows());
}

複数レベルのネストされたクエリの例

次の例は、`col_nested.nested_2.nested_2_2` の値が `tablestore` であるデータをクエリする方法を示しています。この例では、`col_nested` はネストされたフィールドであり、その子行には `nested_1` 列および `nested_2` 列が含まれます。`nested_2` 列もネストされたフィールドであり、その子行には `nested_2_1` 列および `nested_2_2` 列が含まれます。

private static void nestedQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    NestedQuery nestedQuery = new NestedQuery(); // クエリタイプを NestedQuery に設定します。
    nestedQuery.setPath("col_nested.nested_2"); // クエリ対象フィールドの親パスである、ネストされた列のパスを設定します。
    TermQuery termQuery = new TermQuery(); // NestedQuery のサブクエリを構築します。
    termQuery.setFieldName("col_nested.nested_2.nested_2_2"); // クエリ対象フィールドの完全なパスである列名を設定します。
    termQuery.setTerm(ColumnValue.fromString("tablestore")); // クエリする値を設定します。
    nestedQuery.setQuery(termQuery);
    nestedQuery.setScoreMode(ScoreMode.None);
    searchQuery.setQuery(nestedQuery);
    //searchQuery.setGetTotalCount(true); // 一致した行の総数を返すように設定します。

    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
    // columnsToGet パラメーターを使用して、返す列を指定するか、すべての列を返すように設定します。このパラメーターを設定しない場合、デフォルトでプライマリキー列のみが返されます。
    //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    //columnsToGet.setReturnAll(true); // すべての列を返すように設定します。
    //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // 指定した列を返すように設定します。
    //searchRequest.setColumnsToGet(columnsToGet);

    SearchResponse resp = client.search(searchRequest);
    //System.out.println("TotalCount: " + resp.getTotalCount()); // 返された行数ではなく、一致した行の総数を出力します。
    System.out.println("Row: " + resp.getRows());
}

複合ネストされたクエリの例

クエリ要件

データテーブルに、`col_string` (String) および `col_nested` (String) の 2 つの列があると仮定します。`col_nested` 列には JSON 形式のデータが格納されています。次の表は、このデータテーブルのサンプルデータを示しています。

説明

説明のために、各行に行番号列を追加しています。

行番号

col_string

col_nested

1

a

[{"col_keyword": "tablestore"},{"col_keyword": "searchindex","col_long": 1}]

2

b

[{"col_keyword": "tablestore","col_long": 1}]

3

c

[{"col_keyword": "searchindex"},{"col_long": 1}]

`col_nested` 列のデータに対して、次のクエリ要件があると仮定します。

  • 単一の子行が複数のクエリ条件を満たす

    たとえば、`col_nested` 列の単一の子行において、`col_keyword` 列の値が `tablestore` であり、かつ `col_long` 列の値が空でない行をクエリできます。

  • 異なる子行が複数のクエリ条件を満たす

    たとえば、`col_nested` 列の 1 つの子行の `col_keyword` 値が `tablestore` であり、別の子行の `col_long` 値が空でない行をクエリできます。

これらのクエリ要件を満たすには、次の手順を実行します。

  1. データテーブルに対して多次元インデックスを作成し、多次元インデックス内で `col_nested` 列をネスト型として設定します。

    `col_nested` 列には、`col_keyword` (Keyword) および `col_long` (Long) の 2 つのサブフィールドが含まれます。

  2. 要件に応じて適切なクエリ方法を使用します。

    • 単一の子行が複数のクエリ条件を満たす クエリを実行するには、NestedQuery 内で複数の BoolQuery を設定します。

    • 複数の条件を満たす異なる子行をクエリするには、`BoolQuery` の下に複数の `NestedQuery` 条件を設定します。

次の例は、データをクエリする方法を示しています。ご自身のクエリ要件に合った例を参照してください。

単一の子行が複数の条件を満たすクエリの例

次の例は、`col_nested` 列の単一の子行において、`col_nested.col_keyword` が "tablestore" であり、かつ `col_nested.col_long` が空でない行をクエリする方法を示しています。

サンプルデータに基づくと、行 2 のデータのみがクエリ条件を満たします。

public static void nestedQuery(SyncClient client) {
    // 条件 1: col_nested の子行における col_keyword 列の値が "tablestore" であること。
    TermQuery termQuery = new TermQuery();
    termQuery.setFieldName("col_nested.col_keyword");
    termQuery.setTerm(ColumnValue.fromString("tablestore"));

    // 条件 2: col_nested の子行における col_long 列が空でないこと。
    ExistsQuery existsQuery = new ExistsQuery();
    existsQuery.setFieldName("col_nested.col_long");

    // BoolQuery の AND 条件を使用して、両方の条件を満たす子行をクエリします。
    List<Query> mustQueries = new ArrayList<>();
    mustQueries.add(termQuery);
    mustQueries.add(existsQuery);
    BoolQuery boolQuery = new BoolQuery();
    boolQuery.setMustQueries(mustQueries);

    // NestedQuery 内に BoolQuery を設定して、単一の子行が複数のクエリ条件を同時に満たすことを要求します。
    NestedQuery nestedQuery = new NestedQuery();    // クエリタイプを NestedQuery に設定します。
    nestedQuery.setPath("col_nested");   // クエリ対象フィールドの親パスである、ネストされた列のパスを設定します。
    nestedQuery.setQuery(boolQuery);
    nestedQuery.setScoreMode(ScoreMode.None);

    SearchQuery searchQuery = new SearchQuery();
    searchQuery.setQuery(nestedQuery);

    SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
    // columnsToGet パラメーターを使用して、返す列を指定するか、すべての列を返すように設定します。このパラメーターを設定しない場合、デフォルトでプライマリキー列のみが返されます。
    //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
    //columnsToGet.setReturnAll(true); // すべての列を返すように設定します。
    //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // 指定した列を返すように設定します。
    //searchRequest.setColumnsToGet(columnsToGet);

    SearchResponse resp = client.search(searchRequest);
    //System.out.println("TotalCount: " + resp.getTotalCount()); // 返された行数ではなく、一致した行の総数を出力します。
    System.out.println("Row: " + resp.getRows());
}

異なる子行が複数の条件を満たすクエリの例

次の例は、`col_nested` フィールドのネストされたオブジェクトが次の 2 つの条件を満たす行をクエリします:col_nested.col_keyword が "tablestore" であり、かつ col_nested.col_long が空でないこと。

サンプルデータに基づくと、行 1 および行 2 のデータがクエリ条件を満たします。

public static void nestedQuery(SyncClient client) {
        // 条件 1: col_nested の子行における col_keyword 列の値が "tablestore" であること。
        TermQuery termQuery = new TermQuery();
        termQuery.setFieldName("col_nested.col_keyword");
        termQuery.setTerm(ColumnValue.fromString("tablestore"));
        NestedQuery nestedTermQuery = new NestedQuery();
        nestedTermQuery.setPath("col_nested");
        nestedTermQuery.setScoreMode(ScoreMode.None);
        nestedTermQuery.setQuery(termQuery);

        // 条件 2: col_nested の子行における col_long 列が空でないこと。
        ExistsQuery existsQuery = new ExistsQuery();
        existsQuery.setFieldName("col_nested.col_long");
        NestedQuery nestedExistsQuery = new NestedQuery();
        nestedExistsQuery.setPath("col_nested");
        nestedExistsQuery.setScoreMode(ScoreMode.None);
        nestedExistsQuery.setQuery(existsQuery);

        // BoolQuery の AND 条件を使用して、前述の条件を満たす行をクエリします。
        List<Query> mustQueries = new ArrayList<>();
        mustQueries.add(nestedTermQuery);
        mustQueries.add(nestedExistsQuery);

        // BoolQuery に複数の NestedQuery 条件を含めます。異なる子行がそれぞれのクエリ条件を満たす場合、クエリは成功します。
        BoolQuery boolQuery = new BoolQuery();
        boolQuery.setMustQueries(mustQueries);

        SearchQuery searchQuery = new SearchQuery();
        searchQuery.setQuery(boolQuery);

        SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
        // columnsToGet パラメーターを使用して、返す列を指定するか、すべての列を返すように設定します。このパラメーターを設定しない場合、デフォルトでプライマリキー列のみが返されます。
        //SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
        //columnsToGet.setReturnAll(true); // すべての列を返すように設定します。
        //columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // 指定した列を返すように設定します。
        //searchRequest.setColumnsToGet(columnsToGet);

        SearchResponse resp = client.search(searchRequest);
        //System.out.println("TotalCount: " + resp.getTotalCount()); // 返された行数ではなく、一致した行の総数を出力します。
        System.out.println("Row: " + resp.getRows());
    }

ネストされたクエリでのサマリーおよびハイライトの使用例

次の例は、`Col_Nested` ネストされたフィールドの `Level1_Col1_Nested` サブフィールドの値が `hangzhou shanghai` と一致するデータを `NestedQuery` を使用してクエリする方法を示しています。検索クエリは、返された結果内でハイライト表示されます。

/**
 * NestedQuery でサマリーおよびハイライトを使用します。innerHits を使用してパラメーターを設定します。
 */
public static void nestedQueryWithHighlighting(SyncClient client) {
        SearchRequest searchRequest = SearchRequest.newBuilder()
                .tableName("<TABLE_NAME>")
                .indexName("<SEARCH_INDEX_NAME>")
                .returnAllColumnsFromIndex(true)
                .searchQuery(SearchQuery.newBuilder()
                        .limit(5)
                        .query(QueryBuilders.nested()
                                .path("Col_Nested")
                                .scoreMode(ScoreMode.Min)
                                .query(QueryBuilders.match("Col_Nested.Level1_Col1_Nested", "hangzhou shanghai"))
                                .innerHits(InnerHits.newBuilder()
                                        .highlight(Highlight.newBuilder()
                                                .addFieldHighlightParam("Col_Nested.Level1_Col1_Nested", HighlightParameter.newBuilder().build())
                                                .build())
                                        .build()))
                        .build())
                .build();
        SearchResponse resp = client.search(searchRequest);

        // ハイライトされた結果を出力します。
        printSearchHit(resp.getSearchHits(), "");
}

/**
 * searchHit のコンテンツを出力します。
 * @param searchHits 検索ヒット。
 * @param prefix 階層情報を示すために、ネストされた構造を出力する際に追加するプレフィックス。
 */
private static void printSearchHit(List<SearchHit> searchHits, String prefix) {
    for (SearchHit searchHit : searchHits) {
        if (searchHit.getScore() != null) {
            System.out.printf("%s Score: %s\n", prefix, searchHit.getScore());
        }

        if (searchHit.getOffset() != null) {
            System.out.printf("%s Offset: %s\n", prefix, searchHit.getOffset());
        }

        if (searchHit.getRow() != null) {
            System.out.printf("%s Row: %s\n", prefix, searchHit.getRow().toString());
        }

        // 各フィールドのハイライトフラグメントを出力します。
        if (searchHit.getHighlightResultItem() != null) {
            System.out.printf("%s Highlight: \n", prefix);
            StringBuilder strBuilder = new StringBuilder();
            for (Map.Entry<String, HighlightField> entry : searchHit.getHighlightResultItem().getHighlightFields().entrySet()) {
                strBuilder.append(entry.getKey()).append(":").append("[");
                strBuilder.append(StringUtils.join(",", entry.getValue().getFragments())).append("]\n");
            }
            System.out.printf("%s   %s", prefix, strBuilder);
        }

        // ネスト型のハイライト結果。
        for (SearchInnerHit searchInnerHit : searchHit.getSearchInnerHits().values()) {
            System.out.printf("%s Path: %s\n", prefix, searchInnerHit.getPath());
            System.out.printf("%s InnerHit: \n", prefix);
            printSearchHit(searchInnerHit.getSubSearchHits(), prefix + "    ");
        }

        System.out.println();
    }
}

複数レベルのネストされたフィールド `Col_Nested` には、`Level1_Col1_Text` (Text) および `Level1_Col2_Nested` (Nested) の 2 つのサブフィールドが含まれていると仮定します。`Level1_Col2_Nested` ネストされたフィールドには、`Level2_Col1_Text` サブフィールドが含まれます。

次の例は、`Col_Nested` フィールドの `Level1_Col1_Text` サブフィールドおよび `Level1_Col2_Nested` 下の `Level2_Col1_Text` サブフィールドの両方にサマリーおよびハイライト機能を使用するために、`NestedQuery` に `BoolQuery` を追加する方法を示しています。

public static void nestedQueryWithHighlighting(SyncClient client) {
    SearchRequest searchRequest = SearchRequest.newBuilder()
            .tableName("<TABLE_NAME>")
            .indexName("<SEARCH_INDEX_NAME>")
            .returnAllColumnsFromIndex(true)
            .searchQuery(SearchQuery.newBuilder()
                    .limit(5)
                    .query(QueryBuilders.nested()
                            .path("Col_Nested")
                            .scoreMode(ScoreMode.Min)
                            .query(QueryBuilders.bool()
                                    .should(QueryBuilders.match("Col_Nested.Level1_Col1_Text", "hangzhou shanghai"))
                                    .should(QueryBuilders.nested()
                                            .path("Col_Nested.Level1_Col2_Nested")
                                            .scoreMode(ScoreMode.Min)
                                            .query(QueryBuilders.match("Col_Nested.Level1_Col2_Nested.Level2_Col1_Text", "hangzhou shanghai"))
                                            .innerHits(InnerHits.newBuilder()
                                                    .highlight(Highlight.newBuilder()
                                                            .addFieldHighlightParam("Col_Nested.Level1_Col2_Nested.Level2_Col1_Text", HighlightParameter.newBuilder().build())
                                                            .build())
                                                    .build())))
                            .innerHits(InnerHits.newBuilder()
                                    .sort(new Sort(Arrays.asList(
                                            new ScoreSort(),
                                            new DocSort()
                                    )))
                                    .highlight(Highlight.newBuilder()
                                            .addFieldHighlightParam("Col_Nested.Level1_Col1_Text", HighlightParameter.newBuilder().build())
                                            .build())
                                    .build()))
                    .build())
            .build();
    SearchResponse resp = client.search(searchRequest);
    // ハイライトされた結果を出力します。
    printSearchHit(resp.getSearchHits(), "");
}

/**
 * searchHit のコンテンツを出力します。
 * @param searchHits 検索ヒット。
 * @param prefix 階層情報を示すために、ネストされた構造を出力する際に追加するプレフィックス。
 */
private static void printSearchHit(List<SearchHit> searchHits, String prefix) {
    for (SearchHit searchHit : searchHits) {
        if (searchHit.getScore() != null) {
            System.out.printf("%s Score: %s\n", prefix, searchHit.getScore());
        }

        if (searchHit.getOffset() != null) {
            System.out.printf("%s Offset: %s\n", prefix, searchHit.getOffset());
        }

        if (searchHit.getRow() != null) {
            System.out.printf("%s Row: %s\n", prefix, searchHit.getRow().toString());
        }

        // 各フィールドのハイライトフラグメントを出力します。
        if (searchHit.getHighlightResultItem() != null) {
            System.out.printf("%s Highlight: \n", prefix);
            StringBuilder strBuilder = new StringBuilder();
            for (Map.Entry<String, HighlightField> entry : searchHit.getHighlightResultItem().getHighlightFields().entrySet()) {
                strBuilder.append(entry.getKey()).append(":").append("[");
                strBuilder.append(StringUtils.join(",", entry.getValue().getFragments())).append("]\n");
            }
            System.out.printf("%s   %s", prefix, strBuilder);
        }

        // ネスト型のハイライト結果。
        for (SearchInnerHit searchInnerHit : searchHit.getSearchInnerHits().values()) {
            System.out.printf("%s Path: %s\n", prefix, searchInnerHit.getPath());
            System.out.printf("%s InnerHit: \n", prefix);
            printSearchHit(searchInnerHit.getSubSearchHits(), prefix + "    ");
        }

        System.out.println();
    }
}

課金

多次元インデックスを使用してデータをクエリすると、読み取りスループットが消費されます。詳細については、「多次元インデックスのメータリングおよび課金」をご参照ください。

よくある質問

参照