検索品質の向上

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

ランキングとはアイテムの順序付けであり、再現率とは取得された適合アイテムの数です。アイテム(ドキュメントとも呼ばれます)は、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 ではなく、日付プロパティまたはタイムスタンプ プロパティを使用して鮮度を計算できます。

前述のソフトウェア バグ トラッキング システムの例では、期限を 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 プロパティの OrderedRankingASCENDING に指定して、最も投票数の多い問題にランキングを上げることができます。バグ トラッキング システムの問題に対する 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 スキーマを使用するには、類義語を定義するをご覧ください。