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

Tablestore:検索インデックスを使用してデータをクエリするときに "[bool_query] サブクエリは null であってはなりません" というエラーメッセージが表示される場合はどうすればよいですか?

最終更新日:Dec 28, 2024

ブールクエリ機能を使用して検索インデックスに基づいてデータをクエリするときは、クエリ内のサブクエリの条件が空でないことを確認してください。サブクエリのすべてのパラメーターが空の場合、クエリを開始できません。データをクエリする前に、サブクエリの条件が空かどうかを確認してください。

問題の説明

[bool_query] sub query must not be null というエラーメッセージは、ブールクエリ機能を使用して検索インデックスに基づいてデータをクエリするときに表示されます。エラーの例:

com.alicloud.openservices.tablestore.TableStoreException: [bool_query] sub query must not be null
    at com.alicloud.openservices.tablestore.core.CallbackImpledFuture.getResultWithoutLock(CallbackImpledFuture.java:107)
    at com.alicloud.openservices.tablestore.core.CallbackImpledFuture.get(CallbackImpledFuture.java:89)
    at com.alicloud.openservices.tablestore.SyncClient.waitForFuture(SyncClient.java:575)
    at com.alicloud.openservices.tablestore.SyncClient.search(SyncClient.java:490)
    at com.ckb.easy.goods.tablestore.util.TableStoreMultipleIndexUtils.search(TableStoreMultipleIndexUtils.java:205)
    at com.ckb.easy.goods.tablestore.util.TableStoreMultipleIndexUtils.search(TableStoreMultipleIndexUtils.java:128)
    at com.ckb.easy.goods.tablestore.util.TableStoreMultipleIndexUtils.search(TableStoreMultipleIndexUtils.java:96)

原因

サブクエリの条件が空で、必要なパラメーターが構成されていません。

解決策

サブクエリのパラメーター構成を確認し、すべてのサブクエリの条件が正しく構成されていることを確認してください。詳細については、ブールクエリ を参照してください。

関連情報

ブールクエリ機能を使用してデータをクエリする場合、サブクエリは BoolQuery を含む任意のクエリタイプにすることができます。クエリタイプに基づいて、さまざまなドキュメントを参照してパラメーター構成を確認する必要があります。たとえば、サブクエリが TermQuery タイプの場合、タームクエリ の説明に従ってパラメーターを構成できます。次の表に、クエリタイプを示します。

クエリタイプ

説明

タームクエリ

このクエリは、完全一致を使用してデータテーブルからデータを取得します。タームクエリは、文字列一致に基づくクエリに似ています。フィールドが TEXT タイプの場合、Table Store はフィールド値をトークン化し、指定された値と完全に一致するトークンを見つけます。

範囲クエリ

このクエリは、指定された範囲内のデータをデータテーブルから取得します。フィールドが TEXT タイプの場合、Table Store はフィールド値をトークン化し、指定された範囲内にあるトークンを見つけます。

プレフィックスクエリ

このクエリは、指定されたプレフィックスを含むデータをデータテーブルから取得します。フィールドが TEXT タイプの場合、Table Store はフィールド値をトークン化し、指定されたプレフィックスと一致するトークンを見つけます。

一致クエリ

このクエリは、あいまい一致に基づいてデータテーブル内のデータを取得します。フィールドが TEXT タイプの場合、Table Store は指定されたアナライザーを使用してフィールド値とクエリキーワードをトークン化し、あいまい一致に基づいてトークンを見つけます。

ワイルドカードクエリ

このクエリでは、一致させる値にアスタリスク (*) や疑問符 (?) などのワイルドカード文字を指定できます。

アスタリスク (*) は任意の長さの文字列と一致し、疑問符 (?) は単一の文字と一致します。一致させる値は、アスタリスク (*) または疑問符 (?) で始めることができます。

一致フレーズクエリ

このクエリは一致クエリに似ていますが、一致フレーズクエリはトークンの位置を評価する点が異なります。行のトークンの順序と位置が指定された順序と位置と一致する場合にのみ、行はクエリ条件を満たします。

クエリ対象の列のトークン化方法があいまいトークン化の場合、一致フレーズクエリはワイルドカードクエリよりも高速に応答します。

存在クエリ

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

列に NULL 値が含まれているかどうかを確認するには、NOT 演算子を使用して存在クエリを使用します。

複数タームクエリ

このクエリはタームクエリに似ています。複数タームクエリは複数のクエリキーワードをサポートします。キーワードの少なくとも 1 つがフィールド値と一致する場合、データの行が返されます。複数タームクエリは、SQL ステートメントの IN 演算子と同等です。

ブールクエリ

このクエリは、サブクエリの組み合わせに基づいてデータテーブル内のデータを取得します。Table Store は、サブクエリと一致する行を返します。

各サブクエリは、任意のクエリタイプにすることができます。

地理クエリ

地理クエリには、地理距離クエリ、地理境界ボックスクエリ、地理ポリゴンクエリが含まれます。地理クエリは、地理フィールドでのみ使用できます。

  • 地理距離クエリ: このクエリでは、中心点と半径で定義された円形の地理的領域をクエリ条件として指定できます。Table Store は、指定されたフィールドの値が円形の地理的領域内にある行を返します。

  • 地理境界ボックスクエリ: このクエリでは、矩形の地理的領域をクエリ条件として指定できます。Table Store は、指定されたフィールドの値が矩形の地理的領域内にある行を返します。

  • 地理ポリゴンクエリ: このクエリでは、ポリゴンの地理的領域をクエリ条件として指定できます。Table Store は、指定されたフィールドの値がポリゴンの地理的領域内にある行を返します。

ネストクエリ

このクエリは、ネストフィールドの子行のデータを取得します。ネストクエリは、ネストフィールドでのみ使用できます。

ネストフィールドをクエリするには、サブクエリを指定し、各サブクエリのクエリタイプと値を構成する必要があります。