メディア検索をフィルタする

メディア検索アプリを使用している場合は、メタデータを使用して検索クエリをフィルタできます。このページでは、メタデータ フィールドを使用して、特定のドキュメントセットに検索を制限する方法について説明します。

始める前に

メディアアプリとデータストアを作成し、データを取り込んだことを確認します。詳細については、メディア データストアを作成するメディアアプリを作成するをご覧ください。

ドキュメントの例

以下のメディア ドキュメントの例をご覧ください。このページを読む際にこれらを参照できます。

{"id":"172851","schemaId":"default_schema","jsonData":"{\"title\":\"Avatar: Creating the World of Pandora (2010)\",\"categories\":[\"Documentary\"],\"uri\":\"http://mytestdomain.movie/content/172851\",\"available_time\":\"2023-01-01T00:00:00Z\",\"media_type\":\"movie\"}"}
{"id":"243308","schemaId":"default_schema","jsonData":"{\"title\":\"Capturing Avatar (2010)\",\"categories\":[\"Documentary\"],\"uri\":\"http://mytestdomain.movie/content/243308\",\"available_time\":\"2023-01-01T00:00:00Z\",\"media_type\":\"movie\"}"}
{"id":"280218","schemaId":"default_schema","jsonData":"{\"title\":\"Avatar: The Way of Water (2022)\",\"categories\":[\"Action\",\"Adventure\",\"Sci-Fi\"],\"uri\":\"http://mytestdomain.movie/content/280218\",\"available_time\":\"2023-01-01T00:00:00Z\",\"media_type\":\"movie\"}"}
{"id":"72998","schemaId":"default_schema","jsonData":"{\"title\":\"Avatar (2009)\",\"categories\":[\"Action\",\"Adventure\",\"Sci-Fi\",\"IMAX\"],\"uri\":\"http://mytestdomain.movie/content/72998\",\"available_time\":\"2023-01-01T00:00:00Z\",\"media_type\":\"movie\"}"}

フィルタ式の構文

検索フィルタの定義に使用するフィルタ式の構文を理解してください。フィルタ式の構文は、次の Extended Backus–Naur form に要約できます。

  # A single expression or multiple expressions that are joined by "AND" or "OR".
  filter = expression, { " AND " | "OR", expression };
  # Expressions can be prefixed with "-" or "NOT" to express a negation.
  expression = [ "-" | "NOT " ],
    # A parenthetical expression.
    | "(", expression, ")"
    # A simple expression applying to a text field.
    # Function "ANY" returns true if the field contains any of the literals.
    ( text_field, ":", "ANY", "(", literal, { ",", literal }, ")"
    # A simple expression applying to a numerical field. Function "IN" returns true
    # if a field value is within the range. By default, lower_bound is inclusive and
    # upper_bound is exclusive.
    | numerical_field, ":", "IN", "(", lower_bound, ",", upper_bound, ")"
    # A simple expression that applies to a numerical field and compares with a double value.
    | numerical_field, comparison, double );
    # Datetime field
    | datetime_field, comparison, literal_iso_8601_datetime_format);
  # A lower_bound is either a double or "*", which represents negative infinity.
  # Explicitly specify inclusive bound with the character 'i' or exclusive bound
  # with the character 'e'.
  lower_bound = ( double, [ "e" | "i" ] ) | "*";
  # An upper_bound is either a double or "*", which represents infinity.
  # Explicitly specify inclusive bound with the character 'i' or exclusive bound
  # with the character 'e'.
  upper_bound = ( double, [ "e" | "i" ] ) | "*";
  # Supported comparison operators.
  comparison = "<=" | "<" | ">=" | ">" | "=";
  # A literal is any double quoted string. You must escape backslash (\) and
  # quote (") characters.
  literal = double quoted string;
  text_field = text field - for example, category;
  numerical_field = numerical field - for example, score;
  datetime_field = field of datetime data type - for example available_time;
  literal_iso_8601_datetime_format = either a double quoted string representing ISO 8601 datetime or a numerical field representing microseconds from unix epoch.

メタデータを使用してメディア検索をフィルタする手順は次のとおりです。

  1. データストア ID を確認します。データストア ID がすでにある場合は、次のステップに進みます。

    1. Google Cloud コンソールで [Agent Builder] ページに移動し、ナビゲーション メニューで [データストア] をクリックします。

      [データストア] ページに移動

    2. データストアの名前をクリックします。

    3. データストアの [データ] ページで、データストア ID を取得します。

  2. フィルタするドキュメント フィールドを特定します。たとえば、始める前にのドキュメントでは、categories フィールドをフィルタとして使用できます。

    フィルタ式で使用できるのは、インデックス登録可能なフィールドのみです。フィールドがインデックスに登録可能かどうかを確認する手順は次のとおりです。

    1. Google Cloud コンソールで [Agent Builder] ページに移動し、ナビゲーション メニューで [データストア] をクリックします。

      [データストア] ページに移動

    2. データストアの名前をクリックします。

    3. [名前] 列で、データストアをクリックします。

    4. [スキーマ] タブをクリックして、データストアのスキーマを表示します。フィールドの [インデックス登録可能] が次のいずれかの場合:

      • が選択された場合、そのフィールドは検索のフィルタリングに使用できる状態になります。手順 3 はスキップします。

      • が選択されていない場合は、ステップ 3 に沿ってインデックス登録用のフィールドを有効にします。

      • が使用できない場合、そのフィールドにインデックスを付けることはできません。

  3. categories フィールドなどのフィールドをフィルタ可能にするには、次の操作を行います。

    1. Google Cloud コンソールで [Agent Builder] ページに移動し、ナビゲーション メニューで [アプリ] をクリックします。

      [アプリ] ページに移動

    2. メディア検索アプリをクリックします。

    3. ナビゲーション メニューで [データ] をクリックします。

    4. [スキーマ] タブをクリックします。このタブには、現在のフィールド設定が表示されます。

    5. [編集] をクリックします。

    6. まだ選択されていない場合は、[カテゴリ] 行の [インデックス登録可能] チェックボックスをオンにして、[保存] をクリックします。

    7. スキーマの編集が反映されるまで 6 時間ほど待ちます。6 時間経過したら、次のステップに進みます。

  4. 検索結果を取得します。

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search:search" \
    -d '{
    "query": "QUERY",
    "filter": "FILTER"
    }'
    
    • PROJECT_ID: プロジェクトの ID。
    • DATA_STORE_ID: データストアの ID。
    • QUERY: 検索するクエリテキスト。
    • FILTER: フィルタ式を使用して検索結果をフィルタするテキスト フィールド。

    たとえば、始める前にセクションの映画を検索し、(1)「アバター」という単語が含まれ、(2)「ドキュメンタリー」カテゴリに属する映画のみを検索結果に表示したいとします。そのためには、呼び出しに次のステートメントを含めます。

    "query": "avatar",
    "filter": "categories: ANY(\"Documentary\")"
    

    詳細については、search メソッドをご覧ください。

    クリックしてレスポンスの例を表示します。

    上記の手順のような検索を実行すると、次のようなレスポンスが返されます。レスポンスには、アバターのドキュメンタリーのみが表示されます。

    {
      "results": [
        {
          "id": "243308",
          "document": {
            "name": "projects/431678329718/locations/global/collections/default_collection/dataStores/rdds3_1698205785399/branches/0/documents/243308",
            "id": "243308",
            "structData": {
              "categories": [
                "Documentary"
              ],
              "title": "Capturing Avatar (2010)",
              "uri": "http://mytestdomain.movie/content/243308",
              "media_type": "movie"
            }
          }
        },
        {
          "id": "172851",
          "document": {
            "name": "projects/431678329718/locations/global/collections/default_collection/dataStores/rdds3_1698205785399/branches/0/documents/172851",
            "id": "172851",
            "structData": {
              "categories": [
                "Documentary"
              ],
              "uri": "http://mytestdomain.movie/content/172851",
              "media_type": "movie",
              "title": "Avatar: Creating the World of Pandora (2010)"
            }
          }
        }
      ],
      "totalSize": 2,
      "attributionToken": "XfBcCgwIvIzJqwYQ2_qNxwMSJDY1NzEzNmY1LTAwMDAtMmFhMy05YWU3LTE0MjIzYmIwOGVkMiIFTUVESUEqII6-nRXFy_MXnIaOIsLwnhXUsp0VpovvF6OAlyKiho4i",
      "guidedSearchResult": {},
      "summary": {}
    }