検索品質の向上

検索品質とは、検索クエリを作成するユーザーによって認識されるランキングと再現率から見た、検索結果の品質のことです。

ランキングとはアイテムの順序付けであり、再現率とは取得された適合アイテムの数です。アイテム(ドキュメントとも呼びます)は、Google Cloud Search がインデックス登録できる任意のデジタル コンテンツを指します。アイテムの種類には、Microsoft Office ドキュメント、PDF ファイル、データベース内の行、URL などがあります。アイテムは以下のものから構成されます。

  • 構造化メタデータ
  • インデックス登録可能なコンテンツ
  • ACL

Cloud Search では、さまざまなシグナルを使用して、検索クエリの結果(つまり、検索クエリによって得られるアイテム)を取得してランク付けします。スキーマ、アイテムのコンテンツとメタデータ(インデックス登録時)、検索アプリケーションの設定によって、Cloud Search のシグナルに影響を与えることができます。このドキュメントの目的は、検索品質を向上させるために、シグナルに影響を与える設定をどのように調整すればよいかを学ぶことです。

推奨される設定とオプションの設定の概要については、検索品質の推奨される設定とオプションの設定の概要をご覧ください。

トピカリティ スコアに影響を与える

トピカリティとは、検索結果と元のクエリ語句との関連度を指します。アイテムのトピカリティは、次の基準に基づいて計算されます。

  • 各クエリ語句の重要度。
  • ヒット数(アイテムのコンテンツやメタデータにクエリ語句が出現する回数)。
  • Cloud Search でインデックス登録されたアイテムと一致するクエリ語句とそのバリエーションのタイプ。

テキスト プロパティのトピカリティ スコアに影響を与えるには、スキーマ内のテキスト プロパティに RetrievalImportance を定義します。RetrievalImportance が高いプロパティと一致すると、RetrievalImportance が低いプロパティと一致する場合よりもスコアが高くなります。

たとえば、次のような特徴を持つデータソースがあるとします。

  • データソースはソフトウェア バグの履歴を保存するために使用される。
  • 各バグには名前、説明、優先度がある。

ほとんどのユーザーはバグの名前でこのデータソースを照会するため、スキーマ内で名前の RetrievalImportanceHIGHEST に設定します。

逆に、ほとんどのユーザーはバグの説明ではこのデータソースを照会しないため、説明の RetrievalImportanceDEFAULT に設定します。RetrievalImportance 設定を含むサンプル スキーマを次に示します。

{
  "objectDefinitions": [
    {
      "name": "issues",
      "propertyDefinitions": [
        {
          "name": "summary",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": HIGHEST
              }
            }
          },
        {
          "name": "description",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": DEFAULT
              }
            }
          },
        {
          "name": "label",
            "isRepeatable": true,
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": DEFAULT
              }
            }
          },
        {
          "name": "comments",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": DEFAULT
              }
            }
          },
        {
          "name": "project",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": HIGH
              }
            }
          },
        {
          "name": "duedate",
          "datePropertyOptions": {
          }
        },
        ...
      ]
    }
  ]
}

HTML ドキュメントの場合、<title><h1> などのタグは、フォントサイズや太字などの書式設定とともに、さまざまな用語の重要度を決定するのに使用されます。ContentFormatTEXT の場合、ItemContentDEFAULT の取得重要度を持ち、HTML の場合、その取得重要度は HTML のプロパティに基づいて決まります。

鮮度に影響を与える

鮮度は、アイテムが最後に変更された日時を測定します。これは、ItemMetadatacreateTime プロパティと updateTime プロパティによって決まります。古いアイテムは検索結果で下位に表示されます。

スキーマの FreshnessOptionsfreshnessPropertyfreshnessDuration を調整すると、オブジェクトの鮮度の計算方法に影響を与えることができます。

freshnessProperty を使用すると、デフォルトの updateTime の代わりに date または timestamp プロパティで鮮度を計算できます。

前述のソフトウェア バグ トラッキング システムの例では、期限を freshnessProperty として使用できます。それにより、期限が現在の日付に最も近いアイテムが「より鮮度が高い」と見なされ、ランキングが上がります。freshnessProperty 設定を含むサンプル スキーマを次に示します。

{
  "objectDefinitions": [
    {
      "name": "issues",
      "options": {
        "freshnessOptions": {
          "freshnessProperty": "duedate"
        }
      },
      "propertyDefinitions": [
        {
          "name": "summary",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": HIGHEST
            }
          }
        },
        {
          "name": "duedate",
          "datePropertyOptions": {
          }
        },
        ...
      ]
    }
  ]
}

freshnessDuration は、いつアイテムが期限切れと見なされるかを特定するために使用します。たとえば、定期的なインデックス登録を行わないデータソースや、ランキングに鮮度による影響を与えたくないデータソースがあるとします。この目標を達成するには、freshnessDuration に高い値を指定します。

たとえば、従業員のプロフィール情報を含むデータソースがあるとします。このような場合は、従業員情報の変更が従業員のランキングと無関係であることが多いため、通常は freshnessDuration を高くします。freshnessDuration 設定を含むサンプル スキーマを次に示します。

{
  "objectDefinitions": [
    {
      "name": "people",
      "options": {
        "freshnessOptions": {
          "freshnessDuration": "315360000s", # 100 years
        }
      },
    }
  ]
}

ニュース記事を含むデータソースなど、コンテンツが急速に変化するデータソースについては、freshnessDuration を非常に小さい値に設定することもできます。この場合、最後に作成または変更されたドキュメントが、最も鮮度が高くなります。急速に変化するコンテンツを含むデータソースの freshnessDuration 設定を含むサンプル スキーマを次に示します。

{
  "objectDefinitions": [
    {
      "name": "news",
      "options": {
        "freshnessOptions": {
          "freshnessDuration": "259200s", # 3 days
        }
      },
    }
  ]
}

品質に影響を与える

品質とは、アイテムの正確さと有用性を表すものです。データソースには、意味の類似したドキュメントが複数含まれていることがありますが、各ドキュメントの品質はさまざまです。SearchQualityMetadata を使用すると、0 から 1 までの品質値を指定できます。値の高いアイテムは、値の低いアイテムよりもランキングが上がります。この設定は、Cloud Search に提供される情報の範囲外でアイテムの品質に影響を与える(品質を上げる)必要がある場合にのみ使用してください。

たとえば、従業員の福利厚生に関するドキュメントを含むデータソースがあるとします。SearchQualityMetadata を使用して、人事部の従業員が作成したドキュメントのランキングを、他の従業員が作成したドキュメントよりも上げることができます。

バグ トラッキング システムの問題に対する SearchQualityMetadata 設定を含むサンプル スキーマを次に示します。

{
  "name": "datasources/.../items/issue1",
  "acl": {
    ...
  },
  "metadata": {
    "title": "Issue 1"
    "objectType": "issues"
  },
  ...
}

{
  "name": "datasources/.../items/issue2",
  "acl": {
    ...
  },
  "metadata": {
    "title": "Issue 2"
    "objectType": "issues"
    "searchQualityMetadata": {
      "quality": 0.5
    }
  },
  ...
}

{
  "name": "datasources/.../items/issue3",
  "acl": {
    ...
  },
  "metadata": {
    "title": "Issue 3"
    "objectType": "issues"
    "searchQualityMetadata": {
      "quality": 1
    }
  },
  ...
}

このスキーマの場合、ユーザーが検索語句「issue」で検索すると、スキーマ内の Issue 3(品質は 1)は、Issue 2(品質は 0.5)や Issue 1(指定がなければデフォルトの品質は 0 です)よりも高くランク付けされます。

項目の型によって影響を与える

Cloud Search では、整数型または列挙型プロパティの値に基づいてランキングに影響を与えることができます。整数型または列挙型プロパティごとに、OrderedRanking を指定できます。以下の値が設定可能です。

  • NO_ORDER(デフォルト): このプロパティはランキングに影響しません。
  • ASCENDING: 整数型または列挙型プロパティの値が高いアイテムは、値が低いアイテムよりもランキングが上がります。
  • DESCENDING: 整数型または列挙型プロパティの値が低いアイテムは、値が高いアイテムよりもランキングが上がります。

たとえば、バグ トラッキング システムの各バグに、バグの優先度を HIGH(1)、MEDIUM(2)、LOW(3)のいずれかとして格納する列挙型プロパティがあるとします。この場合、DESCENDINGOrderedRanking を設定すると、優先度が HIGH のバグは優先度が LOW のバグよりもランキングが上がります。バグ トラッキング システムの問題に対する OrderedRanking 設定を含むサンプル スキーマを次に示します。

{
  "objectDefinitions": [
    {
      "name": "issues",
      "options": {
        "freshnessOptions": {
          "freshnessProperty": "duedate",
        }
      },
      "propertyDefinitions": [
        {
          "name": "summary",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": HIGHEST
            }
          }
        },
        {
          "name": "duedate",
          "datePropertyOptions": {
          }
        },
        {
          "name": "priority",
          "enumPropertyOptions": {
            "possibleValues": [
              {
                "stringValue": "HIGH",
                "integerValue": 1
              },
              {
                "stringValue": "MEDIUM",
                "integerValue": 2
              },
              {
                "stringValue": "LOW",
                "integerValue": 3
              }
            ],
            "orderedRanking": DESCENDING,
          }
        },

        ...
      ]
    }
  ]
}

バグ トラッキング システムでは、votes という名前の整数型プロパティも使用できます。これは、バグの相対的重要度に関するユーザーからのフィードバックを収集するために使用します。votes プロパティを使用し、得票数の多いバグに高い重要度を付与することで、ランキングに影響を与えることができます。この場合、votes プロパティに ASCENDING として OrderedRanking を指定すると、得票数の多い問題のランキングが上がります。バグ トラッキング システムの問題に対する OrderedRanking 設定を含むサンプル スキーマを次に示します。

{
  "objectDefinitions": [
    {
      "name": "issues",
      "propertyDefinitions": [
        {
          "name": "summary",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": HIGHEST
            }
          }
        },
        {
          "name": "description",
          "textPropertyOptions": {
            "retrievalImportance": {
              "importance": DEFAULT
            }
          }
        },
        {
          "name": "votes",
          "integerPropertyOptions": {
            "orderedRanking": ASCENDING,
            "minimumValue": 0,
            "maximumValue": 1000,
          }
        },

        ...
      ]
    }
  ]
}

クエリ拡張によってランキングに影響を与える

クエリ拡張とは、より良い結果を取得するために、類義語とスペルを使用してクエリの語句を拡張することです。

類義語を使用して検索結果に影響を与える

Cloud Search では、公開されているウェブ コンテンツから推論される類義語を利用してクエリの語句を拡張します。また、カスタムの類義語を定義して、組織内で使われる共通の頭字語のような組織固有の用語や、業界固有の用語を取り込むこともできます。

カスタムの類義語は、データソース内で定義することも、別のデータソースとして定義することもできます。デフォルトでは、類義語はすべての検索アプリケーションのすべてのデータソースに適用されます。ただし、類義語はデータソースと検索アプリケーションでグループ化できます。検索アプリケーションによるグループ化など、カスタムの類義語の定義については、類義語を定義するをご覧ください。

スペルを使用して検索結果に影響を与える

Cloud Search では、公開されている Google 検索のデータを使用して構築したモデルに基づいて、スペル候補を表示します。Cloud Search は、クエリの文脈の中でスペルミスを検出すると、SpellResult にスペルの提案を返します。提案されたスペルは候補としてユーザーに表示されます。たとえば、ユーザーが「employe」という間違ったスペルでクエリを実行すると、「もしかして: employee」のように候補が表示されることがあります。

また、Cloud Search では、スペルの修正を類義語として使用し、スペルミスのせいで見逃される可能性があるドキュメントの取得に役立てています。

検索アプリケーションの設定によってランキングに影響を与える

Google Cloud Search の概要で説明されているように、検索アプリケーションは、検索インターフェースに関連付けられている場合に検索に関するコンテキスト情報を提供する一連の設定です。次の構成により、検索アプリケーションを通してランキングに影響を与えることができます。

  • スコアリング構成
  • ソース構成

次の 2 つのセクションでは、これらの構成がランキングに影響を与えるうえでどのように役立つかを説明します。

スコアリング構成を調整する

検索アプリケーションごとに、ScoringConfig を指定して、ランク付けの際に一部のシグナルの適用を制御できます。現在のところ、鮮度パーソナライズを無効にできます。

鮮度を無効にすると、データソースのスキーマで指定された鮮度のオプションにかかわらず、検索アプリケーションにリストされているすべてのデータソースについて鮮度が無効になります。同様に、パーソナライズを無効にすると、オーナーインタラクションがランキングに影響を与えなくなります。

この設定を構成する詳細な手順については、Cloud Search の検索機能をカスタマイズするをご覧ください。

ソース構成を調整する

ソース構成によって、検索アプリケーションのデータソース レベルの設定を行えます。次の設定がサポートされています。

  • ソースの重要度
  • クラウディング

ソースの重要度を設定する

ソースの重要度とは、検索アプリケーション内のデータソースの相対的な重要度のことです。この設定は、SourceScoringConfig 内の SourceImportance フィールドで指定できます。ソースの重要度が HIGH のデータソースのアイテムは、ソースの重要度が DEFAULT または LOW のデータソースのアイテムよりもランキングが上がります。ユーザーが特定のデータソースからの結果を好むと思われる場合は、この設定を使用してランキングに影響を与えます。

たとえば、外部および内部のトラブルシューティング データを含むプロダクト サポート ポータルがあるとします。この場合、内部データソースからの結果を優先するように検索アプリケーションを構成できます。

この設定を構成する詳細な手順については、Cloud Search の検索機能をカスタマイズするをご覧ください。

クラウディングを設定する

クラウディングとは、検索アプリケーションのデータソースから返される可能性がある結果の最大数のことです。この値は、SourceCrowdingConfignumResults フィールドを使用して制御できます。この値のデフォルトは 3 です。つまり、あるデータソースからの結果を 3 件表示したら、Cloud Search は他のデータソースからの結果を表示し始めます。すべてのデータソースがそれぞれのクラウディングの上限に達した場合や、他のデータソースから得られる結果がなくなった場合にのみ、最初のデータソースのアイテムが再度使用されます。

この設定は、検索結果の多様性を確保し、検索結果ページが 1 つのデータソースで占められるのを防ぐのに役立ちます。

この設定を構成する詳細な手順については、Cloud Search の検索機能をカスタマイズするをご覧ください。

パーソナライズによってランキングに影響を与える

パーソナライズとは、結果にアクセスする個々のユーザーに基づいてパーソナライズされた検索結果を表示することです。次の基準に基づいてアイテムに優先順位を付けることで、ランキングに影響を与えることができます。

  • アイテムのオーナー
  • アイテムのインタラクション
  • ユーザーのクリック
  • アイテムの言語

次の 3 つのセクションでは、これらの基準に基づいて検索品質に影響を与える方法を説明します。

アイテムのオーナーに基づいてランキングを上げる

「アイテムのオーナーに基づいてランキングを上げる」とは、検索クエリを実行するユーザーがオーナーであるアイテムのランキングを上げることです。各項目には、owners フィールドを持つ ItemAcl があります。クエリを実行するユーザーがアイテムのオーナーである場合、デフォルトで、そのアイテムのランキングが上がります。このパーソナライズは検索アプリケーションでオフにできます。

アイテムのインタラクションに基づいてランキングを上げる

「アイテムのインタラクションに基づいてランキングを上げる」とは、検索クエリを実行するユーザーがインタラクション(閲覧、コメント、編集など)を行ったアイテムのランキングを上げることです。

アイテムのインタラクションに関するシグナルは、Google ドライブや Gmail などの Google Workspace サービスでは自動的に取得されます。他のプロダクトでは、インタラクションの種類(閲覧や編集)、インタラクションのタイムスタンプ、プリンシパル(アイテムに対してインタラクションを行ったユーザー)など、アイテムレベルのインタラクション データを利用できます。インタラクションを行ってから経過した時間が短いアイテムは、ランキングが高くなります。

ユーザーのクリックに基づいてランキングを上げる

Cloud Search は、現在の検索結果のクリックを収集し、同じユーザーが以前にクリックしたアイテムをブーストすることで、今後の検索のランキングを改善します。

クエリ解釈によってランキングに影響を与える

Cloud Search のクエリ解釈機能は、ユーザーのクエリ内の演算子とフィルタを自動的に解釈し、それらの要素を構造化された演算子ベースのクエリに変換します。クエリ解釈では、インデックス付きドキュメントとともに、スキーマで定義された演算子を使用して、ユーザのクエリの意味を推測します。この機能により、ユーザーは最小限のキーワードで検索できるとともに、正確な結果が得られます。詳細については、最適なクエリ解釈のためのスキーマを構造するをご覧ください。

アイテムの言語に基づいてランキングを上げる

「アイテムの言語に基づいてランキングを上げる」とは、クエリの言語と一致しない言語のアイテムのランキングを下げることです。言語に基づいてアイテムのランキングに影響を与えるものを次に示します。

  • クエリ言語。検索クエリの自動検出言語、または RequestOptions で指定された languageCode

    カスタム検索インターフェースを構築する場合は、languageCode をユーザーのインターフェース言語または言語設定(ウェブブラウザの言語や検索インターフェース ページの言語など)に設定する必要があります。自動検出されたクエリ言語は languageCode よりも優先されるため、ユーザーがインターフェースとは異なる言語でクエリを入力しても、検索品質が損なわれることはありません。

  • アイテムの言語。インデックス登録時に ItemMetadata に設定された contentLanguage、または Cloud Search によって自動検出されたコンテンツの言語。

    インデックス作成時にドキュメントの contentLanguage が空のままで、ItemContent が入力されている場合、Cloud Search は ItemContent で使用されている言語を検出して内部に保存しようとします。自動検出された言語は contentLanguage フィールドに追加されません。

クエリとアイテムの言語が一致する場合、言語によりランキングが下げられることはありません。両者の設定が一致しない場合、アイテムのランキングが下げられます。contentLanguage が空で、Cloud Search が言語を自動的に検出できなかったドキュメントには、言語の降格は適用されません。そのため、Cloud Search で言語が検出されないとしても、ドキュメントのランキングには影響しません。

アイテムのコンテキストに基づいてランキングを上げる

検索クエリのコンテキストに関連性の高いアイテムのランキングを上げることができます。コンテキスト(contextAttributes)は、インデックス登録時と検索リクエスト時に指定できる名前付き属性のセットです。特定の検索クエリのコンテキストを提供します。

たとえば、従業員給付ドキュメントなどのアイテムが、LocationDepartment(市区町村(San Francisco)、州(California)、国(USA)、DepartmentEngineering)など)のコンテキストでより関連性が高いとします。この場合、次の名前付き属性を使用してアイテムをインデックス登録できます。

{
  ...
  "metadata": {
    "contextAttributes": [
      {
        name: "Location"
        values: [
          "San Francisco",
          "California",
          "USA"
        ],
      },
      {
        name: "Department"
        values: [
          "Engineering"
        ],
      }
    ],
  },
  ...
}

ユーザーが検索インターフェースに「福利厚生」という検索クエリを入力すると、検索リクエストにユーザーの位置情報と部門が含まれる場合があります。たとえば、シカゴのエンジニアの所在地と部署情報を含む検索リクエストは次のようになります。

{
  ...
  "contextAttributes": [
    {
      name: "Location"
      values: [
        "Chicago",
        "Illinois",
        "USA"
      ],
    },
    {
      name: "Department"
      values: [
        "Engineering"
      ],
    }
  ],
  ...
}

インデックスに登録されたアイテムと検索リクエストの両方に「Department=Engineering」と「Location=USA」という属性が含まれているため、インデックスに登録されたアイテム(社員給付ドキュメント)は検索結果の上位に表示されます。

インドのエンジニアである別のユーザーが、検索インターフェースに「福利厚生」という検索クエリを入力したとします。場所と部門の情報を含む検索リクエストは次のとおりです。

{
  ...
  "contextAttributes": [
    {
      name: "Location"
      values: [
        "Bengaluru",
        "Karnataka",
        "India"
      ],
    },
    {
      name: "Department"
      values: [
        "Engineering"
      ],
    }
  ],
  ...
}

インデックスに登録されたアイテムと検索リクエストの両方に「Department=Engineering」の属性がのみ含まれているため、インデックスに登録されたアイテムは、(米国イリノイ州シカゴのエンジニアが入力した最初の検索クエリ「benefits」と比較すると)検索結果でわずかに上位に表示されます。

ランキングを上げる際に使用できるコンテキストの例を以下に示します。

  • 位置情報: 特定の場所(建物、都市、国、地域など)のユーザーとの関連性が高いアイテムを検索できます。
  • 職務: テクニカル ライターやエンジニアなど、特定の職務のユーザーとの関連性が高いアイテムを表示できます。
  • 部門: 特定の部門(営業やマーケティングなど)に関連性の高いアイテムを検索できます。
  • 役職レベル: ディレクターや CEO など、特定の役職レベルに関連性の高い項目を設定できます。
  • 社員の種類: パートタイムやフルタイムなど、特定の種類の社員に関連性の高いアイテムを表示できます。
  • 在籍期間: 新入社員など、従業員の在籍期間に関連性の高い項目を表示できます。

アイテムの閲覧数によってランキングに影響を与える

Cloud Search では、人気のあるアイテムのランキングが優先されます。つまり、最近の検索クエリでクリックされたアイテムが優先されます。

クリックブーストによってランキングに影響を与える

Cloud Search は、現在の検索結果のクリック数を収集し、特定の検索クエリで人気のあるアイテムを優先することで、今後の検索のランキングを改善します。

推奨およびオプションの検索品質設定の概要

次の表に、推奨される検索品質設定とオプションの検索品質設定をすべて示します。この推奨設定は、Cloud Search のランキング モデルから最大限の効果を引き出すのに役立ちます。

設定場所推奨 / オプション詳細
スキーマ設定
ItemContent フィールドItemContent推奨スキーマの作成時または更新時に、アイテムの非構造化コンテンツを入力します。この項目はスニペットの生成に使用されます。
RetrievalImportance フィールドRetrievalImportance推奨スキーマの作成時または更新時に、明らかに重要性またはトピカリティがあるテキスト プロパティに設定します。
FreshnessOptionsFreshnessOptionsオプションスキーマの作成時または更新時に、誤ったデータやデータの欠落が原因でアイテムのランキングが下がらないように設定します。
インデックス設定
createTime/updateTimeItemMetadata推奨アイテムのインデックス登録時に入力します。
contentLanguageItemMetadata推奨アイテムのインデックス登録時に入力します。指定しない場合、Cloud Search は ItemContent で使用されている言語を検出しようとします。
owners フィールドItemAcl()推奨アイテムのインデックス登録時に入力します。
カスタムの類義語_dictionaryEntry スキーマ推奨インデックス登録時に、データソース レベルで定義するか、別のデータソースとして定義します。
quality フィールドSearchQualityMetadata省略可意味の似たアイテムを品質に基づいてランク付けするには、インデックス登録時に品質を設定します。データソース内のすべてのアイテムにこの項目を設定すると、効果がなくなります。
アイテムレベルのインタラクション データinteractionオプションデータソースでユーザーのインタラクションへのアクセスが記録および提供される場合は、インデックス登録時に各アイテムのインタラクションを入力します。
整数型 / 列挙型プロパティOrderedRankingオプションアイテムの順序が重要である場合、インデックス登録時に整数型および列挙型プロパティのランキング付けを指定します。
検索アプリケーション設定
Personalization=falseScoringConfig または Cloud Search の管理 UI を使用推奨検索アプリケーションの作成時または更新時に設定します。「パーソナライズによってランキングに影響を与える」セクションで説明したように、正しいオーナー情報を指定してください。
SourceImportance フィールドSourceCrowdingConfig省略可特定のデータソースからの結果にバイアスをかけるには、この項目を設定します。
numResults フィールドSourceCrowdingConfig省略可結果の多様性を管理するには、この項目を設定します。

次の手順

必要に応じて次の手順を行います。

  1. 最適なクエリ解釈のためのスキーマを構築します

  2. _dictionaryEntry スキーマを活用して、自社でよく使用される用語の類義語を定義する方法を学びます。_dictionaryEntry スキーマを使用するには、類義語を定義するをご覧ください。