ウェブサイト検索をフィルタする

このページでは、ウェブサイトのデータを使用して検索アプリの検索クエリをフィルタする方法について説明します。

始める前に

アプリとデータストアを作成し、ウェブサイトのデータをデータストアに取り込んだことを確認します。詳細については、検索アプリを作成するをご覧ください。

フィルタ式について

フィルタ式を使用して、ウェブサイトの検索フィルタを作成します。フィルタの作成方法は、高度なウェブサイト インデックス処理を有効にしているかどうかによって異なります。基本的なウェブサイト検索とウェブサイトの高度なインデックス登録のどちらをご利用かによって、次のいずれかのセクションをご覧ください。

基本的なウェブサイト検索のフィルタ式

このセクションでは、基本的なウェブサイト検索(ウェブサイトの高度なインデックス登録がオフ)でのフィルタ式の動作について説明します。

基本的なウェブサイト検索の構文

次のExtended Backus-Naur form は、基本的なウェブサイト検索の場合のウェブサイト検索の定義に使用できるフィルタ式の構文をまとめたものです。フィルタ内のコロン後の二重引用符は厳密に適用されます。

    # A single expression or multiple expressions that are joined by "AND".
  filter = expression, { "AND", expression };
  expression =
    # A simple expression applying to a text url string.
    | filter_key, ":", \"text_value\"
  filter_key = (cr | highRange | lowRange | fileType | lr | rights | siteSearch);
  text_value = string value to filter on;

基本的なウェブサイト検索で使用できるフィールド

基本的なウェブサイト検索でウェブサイト検索をフィルタリングするために使用できるフィールドは次のとおりです。

  • cr(文字列)検索結果を特定の国のドキュメントに制限します。 サポートされている値の一覧については、国コレクションの値をご覧ください。

  • highRange(文字列)検索範囲の上限を指定します。ドキュメントに数値が含まれている場合、そのドキュメントをレスポンスに含めるには、その数値が highRange の値以下である必要があります。highRangelowRange の両方を指定して、これらのパラメータの範囲内の検索クエリを作成します。

  • lowRange(文字列)検索範囲の下限を指定します。ドキュメントに数値が含まれている場合、そのドキュメントをレスポンスに含めるには、その数値が lowRange 以上の値である必要があります。lowRangehighRange の両方を指定して、これらのパラメータの範囲内の検索クエリを作成します。

  • fileType(文字列)指定した拡張子のドキュメントに検索結果を制限します。サポートされているファイル形式の一覧については、Google でインデックス登録できるファイル形式をご覧ください。

  • lr(文字列)指定した言語で作成されたドキュメントに検索結果を制限します。サポートされている言語の一覧については、クエリ パラメータ(lr)をご覧ください。

  • rights(文字列)ライセンスに基づいて検索結果をフィルタします。サポートされている値については、クエリ パラメータ(権利)をご覧ください。

  • siteSearch(文字列)クエリで検索するウェブページの URL パターンを指定します。

基本的なウェブサイト検索の例

基本的なウェブサイト検索で使用できるフィルタの例を以下に示します。

  • {"filter": "cr:\"countryUS\" AND siteSearch:\"https://example.com/example_domain\""}

    (1)米国から送信されたドキュメントと、(2)ドメイン https://example.com/example_domain 内のドキュメントをフィルタします。

  • {"filter": "fileType:\".pdf\" AND lr:\"lang_en\""}

    (1)PDF ファイル、(2)英語のドキュメントをフィルタします。

  • {"filter": "rights:\"cc_publicdomain\""}

    パブリック ドメインにあるドキュメントをフィルタします。

ウェブサイトの高度なインデックス登録によるフィルタ式

このセクションでは、ウェブサイトの高度なインデックス登録(ウェブサイトの高度なインデックス登録がオンになっている)でのフィルタ式の動作について説明します。

ウェブサイトの高度なインデックス登録で使用できるフィールド

ウェブサイトの高度なインデックス登録が有効になっている場合は、次のフィールドを使用してウェブサイト検索をフィルタできます。

  • siteSearch(文字列): クエリで検索するウェブページの URL パターン。
  • meta タグ名と PageMap 属性名: データストアのスキーマに追加して、フィールドを検索可能、取得可能、インデックス登録可能にするように追加できる、ウェブページの構造化データ。詳しくは、ウェブサイトの高度なインデックス登録に構造化データを使用するをご覧ください。

ウェブサイトの高度なインデックス登録の構文

次の Extended Backus-Naur form は、ウェブサイトの高度なインデックス登録の場合のウェブサイト検索の定義に使用できるフィルタ式の構文をまとめたものです。フィルタ内のコロン後の二重引用符は厳密に適用されます。

siteSearch をフィルタする場合の EBNF 構文は次のとおりです。

    # A single expression or multiple expressions that are joined by "OR".
  filter = expression, { "OR", expression };
    # Expressions can be prefixed with "-" or "NOT" to express a negation.
  expression = [ "-" | "NOT " ],
    # A simple expression applying to a text url string.
    | filter_key, ":", \"url_string\"
  filter_key = siteSearch;
  url_string = double quoted string representing a URL;

meta タグ名と PageMap 属性名でフィルタする場合の EBNF 構文は次のとおりです。

    # A single expression or multiple expressions that are joined by "OR".
  filter = expression, { "OR", expression };
    # Expressions can be prefixed with "-" or "NOT" to express a negation.
  expression = [ "-" | "NOT " ],
   # Function "ANY" returns true if the field exactly matches any of the literals.
    | text_field, ":", "ANY", "(", literal, { ",", literal }, ")"
  literal = double quoted string;
  # text_field corresponds to the meta tag or PageMap Attribute name, for example, category
  text_field = text field;

ウェブサイトの高度なインデックス登録の例

siteSearch を使用したウェブサイトの高度なインデックス登録のフィルタの例を以下に示します。

  • {"filter": "siteSearch:\"https://example.com/example_domain\""}

    ドメイン https://example.com/example_domain にあるドキュメントをフィルタします。例: https://example.com/example_domain/index.html

  • {"filter": "siteSearch:\"https://example.com/subdomains/*\""}

    https://example.com/subdomains/* に一致するドメインにあるドキュメントをフィルタします。例: https://example.com/subdomains/example_subdomain_page

  • {"filter": "siteSearch:\"https://altostrat.com/subdomain/pages/*\" OR siteSearch:\"http://cymbalgroup.com/pages/*\""}

    1 つ目の URL パターンまたは 2 つ目の URL パターンに一致するドメインにあるドキュメントをフィルタします。たとえば、https://altostrat.com/subdomain/pages/title_pagehttps://cymbalgroup.com/subdomain/pages/title_pagehttps://altostrat.com/subdomain/pages/INFO です。

meta または PageMap 属性名のフィルタリングの例を次に示します。

  • {"filter": "product: ANY(\"networking\",\"compute\")"}

    meta タグまたは product という名前の PageMap 属性が含まれ、値が networking または compute であるドキュメントをフィルタします。

  • {"filter": "NOT product: ANY(\"storage\")"}

    meta タグまたは PageMap 属性名 product が含まれず、値が storage であるドキュメントをフィルタします。

インデックスに使用される meta タグ名と PageMap 属性名の詳細については、meta タグのユースケースの例PageMap のユースケースの例をご覧ください。

ウェブサイト検索をフィルタするには、次の操作を行います。

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

    1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

      [アプリ] に移動

    2. [アプリ] ページでアプリの名前を見つけ、[ID] 列からアプリの ID を取得します。

  2. ウェブサイト検索をフィルタするには、filter フィールドと engines.servingConfigs.search メソッドを使用します。

    curl -X POST -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
    -d '{
     "servingConfig": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search",
    "query": "QUERY",
    "filter": "FILTER"
    }'