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

Tablestore:多次元インデックスに対して Search 操作を呼び出したときにデータが見つからない場合の対処方法

最終更新日:Jan 25, 2025

多次元インデックスに対して Search 操作を呼び出したときにデータが見つからない場合は、データテーブルから多次元インデックスへのデータの同期が正しく行われていないか、不適切なクエリメソッドを使用している可能性があります。この場合は、データテーブルから多次元インデックスへのデータの同期が正しく行われているか、適切なクエリメソッドを使用しているかを確認してください。

問題の説明

多次元インデックスに対して Search 操作を呼び出してデータをクエリすると、データが見つかりません。

考えられる原因

  • 原因 1:データテーブルのデータが多次元インデックスに正しく同期されていない

    • ケース 1:データテーブルのデータが多次元インデックスに同期されていない。データテーブルのデータは、多次元インデックスに非同期的に同期されます。この場合、多次元インデックスのデータが更新されていない可能性があります。

    • ケース 2:多次元インデックスの列名は大文字と小文字が区別され、データテーブルの列名と一致しない場合があります。たとえば、データテーブルの列名が ColumnName であるとします。多次元インデックスの列名が columnname の場合、columnname はデータテーブルの列名と一致しません。

    • ケース 3:多次元インデックスの列のデータ型が、データテーブルのマッピングされた列のデータ型と一致しません。たとえば、データテーブルの列が Integer 型なのに、多次元インデックスのマッピングされた列が Keyword 型であるとします。

      説明

      Tablestore のワイドカラムモデルはスキーマレスです。属性列は行ごとに異なるデータ型を持つことができ、特定の行についてデータテーブルから多次元インデックスへの同期が失敗する可能性があります。

    • ケース 4:多次元インデックスの列のデータ型が、データテーブルのマッピングされた列のデータ形式と一致しません。たとえば、データテーブルの列が String データ型で値が -91,100 であるのに、多次元インデックスのマッピングされた列が Geopoint、Nested、または Vector データ型であるとします。

      説明
      • 多次元インデックスの Geopoint データ型は、latitude,longitude 形式です。緯度は -90 ~ +90 の範囲内で、経度は -180 ~ +180 の範囲内である必要があります。緯度は経度の前に指定する必要があります。

      • 多次元インデックスの Nested データ型は JSON 配列形式です。例:[{"tagName":"tag1", "score":0.8}, {"tagName":"tag2", "score":0.2}]

      • 多次元インデックスの Vector データ型は Float32 配列形式です。配列の長さは、フィールドの次元数と同じである必要があります。たとえば、[1,5.1,4.7,0.08] の次元数は 4 です。

  • 原因 2:不適切なクエリメソッドが使用されている

    • ケース 1:一致検索を使用して、多次元インデックスの Keyword データ型のフィールドのデータをクエリします。たとえば、データテーブルの列値が "abc" で、多次元インデックスのマッピングされた列が Keyword 型であるとします。クエリ条件を MatchQuery("ab") に設定すると、Keyword データ型のデータはトークン化できないため、データは見つかりません。一致検索を使用してトークンを照合することはできません。

    • ケース 2:クエリ条件のパラメーターが正しく構成されていません。たとえば、データテーブルの列値が "abc" で、多次元インデックスのマッピングされた列が Keyword 型であるとします。クエリ条件を TermQuery("ab") に設定すると、データは見つかりません。

    • ケース 3:範囲クエリを使用して多次元インデックスの Keyword 列をクエリする場合、クエリ条件の設定が無効です。たとえば、データテーブルの列値が 20 で、多次元インデックスのマッピングされた列が Keyword 型であるとします。クエリ条件を RangeQuery(>10) に設定すると、データは見つかりません。

      説明

      範囲クエリでは、Keyword データ型のデータはアルファベット順で比較され、Long および Double データ型のデータは数値に基づいて比較されます。

    • ケース 4:トークン化メソッドが正しく指定されていません。たとえば、データテーブルの列値が "abcdefg" で、多次元インデックスのマッピングされた列が Text 型で、トークン化メソッドが文字トークン化に設定されているとします。クエリ条件を MatchQuery("abcd") に設定すると、データは見つかりません。

解決策

  • データテーブルのデータが多次元インデックスに正しく同期されていない

    • データテーブルのデータが多次元インデックスに同期されていることを確認します。ほとんどの場合、増分データ同期の待機時間は 3 秒以内です。完全データ同期の待機時間は、データテーブルのデータ量に正比例します。

    • 多次元インデックスを作成するときは、多次元インデックスの列とデータテーブルの列の間の名前とデータ型のマッピングが正しいことを確認します。また、データテーブルのデータ形式が多次元インデックスのデータ型と一致していることを確認します。詳細については、「データ型」、「文字列型」、「日付データ型」、および「配列およびネストされたデータ型」をご参照ください。

      説明

      多次元インデックスの構成が無効な場合は、別の多次元インデックスを作成するか、現在の多次元インデックスのスキーマを動的に変更できます。詳細については、「多次元インデックスの作成」および「多次元インデックスのスキーマを動的に変更する」をご参照ください。

    • k 近傍 (KNN) ベクタークエリ機能を使用する場合は、多次元インデックスの Vector フィールドの属性が、埋め込みシステムによって生成された Vector フィールドの属性と同じであることを確認します。Vector フィールドの属性には、次元数、データ型、および距離測定アルゴリズムが含まれます。詳細については、「KNN ベクタークエリ」をご参照ください。

  • 不適切なクエリメソッドが使用されている

    • 多次元インデックスを使用してデータをクエリする場合は、適切なクエリメソッドが使用され、有効なクエリ条件が指定されていることを確認します。詳細については、「はじめに」をご参照ください。

    • 正しいトークン化メソッドが指定されていることを確認します。正しいトークン化メソッドの選択方法については、「トークン化」をご参照ください。