検索品質の向上

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

ランキングとはアイテムの順序付けであり、再現率とは取得された適合アイテムの数です。アイテム(ドキュメントともいいます)は、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 の場合、ItemContent の取得重要度は DEFAULT になり、HTML の場合、取得重要度は HTML プロパティに基づいて決定されます。

鮮度に影響を与える

鮮度は、アイテムがいつ変更されたかを測定し、ItemMetadatacreateTime プロパティと updateTime プロパティによって決定されます。検索結果で古いアイテムは降格されます。

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

freshnessProperty を使用すると、デフォルトの updateTime の代わりに、日付またはタイムスタンプのプロパティを使用して鮮度を計算できます。

前述のソフトウェア バグ トラッキング システムの例では、期限を 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)のいずれかとして格納する列挙型プロパティがあるとします。このシナリオでは、OrderedRankingDESCENDING に設定すると、優先度が LOW のバグと比較して、優先度が HIGH のバグのランキングが上がります。バグ トラッキング システムの問題に対する 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 があります。クエリを実行するユーザーがアイテムのオーナーである場合、デフォルトで、そのアイテムのランキングが上がります。このパーソナライズは検索アプリケーションでオフにできます。

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

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

アイテムのインタラクション シグナルは、ドライブや 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)は、特定の検索クエリのコンテキストを提供するために、インデックス登録時と検索リクエストで指定できる一連の名前付き属性です。

たとえば、従業員福利厚生書類などのアイテムが、都市(San Francisco)、州(California)、国(USA)、DepartmentEngineering)などの LocationDepartment のコンテキストで関連性が高いとします。この場合、次の名前付き属性を使用してアイテムをインデックスに登録できます。

{
  ...
  "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」の属性が含まれているため、インデックスに登録されたアイテム(従業員福利厚生ドキュメント)は検索結果の上位に表示されます。

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

{
  ...
  "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 または CloudSearch 管理 UI を使用する推奨検索アプリケーションの作成時または更新時に設定します。「パーソナライズによってランキングに影響を与える」セクションで説明したように、正しいオーナー情報を指定してください。
SourceImportance フィールドSourceCrowdingConfig任意特定のデータソースからの結果にバイアスをかけるには、この項目を設定します。
numResults フィールドSourceCrowdingConfig任意結果の多様性を管理するには、この項目を設定します。

次のステップ

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

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

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