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

Tablestore:Exists クエリ

最終更新日:Dec 28, 2024

Exists クエリは、NULL クエリまたは NULL 値クエリとも呼ばれます。このクエリは、スパースデータで使用され、行の列が存在するかどうかを判断します。たとえば、住所列の値が空でない行をクエリできます。

説明
  • Nested 列に対して Exists クエリを実行する場合は、ネストクエリを使用できます。

  • 列に空の値が含まれているかどうかを確認する場合は、BoolQuery の mustNotQueries と共に ExistsQuery を使用する必要があります。

  • 次のいずれかの条件が満たされている場合、システムは列が存在しないと見なします。この例では、city 列が使用されています。

    • 検索インデックスの city 列のタイプが、keyword などの基本タイプである場合。データテーブルに city 列が存在しない行がある場合、検索インデックスは city 列が存在しないと見なします。

    • 検索インデックスの city 列のタイプが、keyword などの基本タイプである場合。データテーブルの city 列の値が空の配列である行 ("city" = "[]") がある場合、検索インデックスは city 列が存在しないと見なします。

前提条件

パラメーター

パラメーター

説明

fieldName

クエリ対象の列の名前。

query

クエリタイプ。このパラメーターを ExistsQuery に設定します。

getTotalCount

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

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

tableName

データテーブルの名前。

indexName

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

columnsToGet

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

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

returnAll フィールドを true に設定すると、すべての列が返されます。

次のサンプルコードは、指定された列が空でないすべての行をクエリする方法の例を示しています。

public static void existQuery(SyncClient syncClient) {
    // col_keyword フィールドが存在するかどうかをクエリします。 col_keyword フィールドは Nested フィールドではありません。
    {
        {
            // 次のサンプルコードは、Nested タイプではないフィールドが存在するかどうかをクエリする方法の例を示しています。
            SearchQuery searchQuery = new SearchQuery();
            ExistsQuery existQuery = new ExistsQuery(); // クエリタイプを ExistsQuery に設定します。
            existQuery.setFieldName("col_keyword");
            searchQuery.setQuery(existQuery);
            SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
            SearchResponse resp = syncClient.search(searchRequest);
        }
        {
            // ビルダーを構築します。
            SearchResponse resp = syncClient.search(SearchRequest.newBuilder()
                    .indexName("<SEARCH_INDEX_NAME>")
                    .tableName("<TABLE_NAME>")
                    .searchQuery(
                            SearchQuery.newBuilder()
                                    .query(QueryBuilders.exists("col_keyword"))
                                    .limit(10)
                                    .build())
                    .build());
        }
    }
    // Nested 構造は [{"keyword":"a","long":123}] です。
    {
        // col_nested 親フィールドが存在するかどうかをクエリします。 col_nested フィールドは Nested タイプです。
        {
            SearchResponse resp = syncClient.search(SearchRequest.newBuilder()
                    .indexName("<SEARCH_INDEX_NAME>")
                    .tableName("<TABLE_NAME>")
                    .searchQuery(
                            SearchQuery.newBuilder()
                                    .query(QueryBuilders.nested()
                                            .scoreMode(ScoreMode.None)
                                            .path("col_nested")
                                            .query(QueryBuilders.exists("col_nested")))
                                    .limit(10)
                                    .getTotalCount(false)
                                    .build())
                    .build());
        }
        // col_nested.keyword フィールドが存在するかどうかをクエリします。 col_nested.keyword フィールドは Nested タイプです。
        {
            SearchResponse resp = syncClient.search(SearchRequest.newBuilder()
                    .indexName("<SEARCH_INDEX_NAME>")
                    .tableName("<TABLE_NAME>")
                    .searchQuery(
                            SearchQuery.newBuilder()
                                    .query(QueryBuilders.nested()
                                            .scoreMode(ScoreMode.None)
                                            .path("col_nested")
                                            .query(QueryBuilders.exists("col_nested.keyword")))
                                    .limit(10)
                                    .getTotalCount(false)
                                    .build())
                    .build());
        }
    }
}

FAQ

関連情報