スキーマの作成と登録

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Google Cloud Search スキーマは、データのインデックス作成とクエリに使用するオブジェクト、プロパティ、オプションを定義する JSON 構造です。コンテンツ コネクタは、リポジトリからデータを読み取り、登録済みのスキーマに基づいて、データを構造化してインデックスを作成します。

スキーマを作成するには、JSON スキーマ オブジェクトを API に提供してから登録します。データをインデックスに登録するには、事前に各リポジトリにスキーマ オブジェクトを登録する必要があります。

このドキュメントでは、スキーマ作成の基礎について説明します。検索エクスペリエンスを向上させるためにスキーマを調整する方法については、検索品質の向上をご覧ください。

スキーマを作成する

Cloud Search スキーマを作成するには、次の手順に従います。

  1. 想定されるユーザー行動を特定する
  2. データソースを初期化する
  3. スキーマの作成
  4. サンプル スキーマを完成させる
  5. スキーマの登録
  6. データのインデックス登録
  7. スキーマをテストする
  8. スキーマを調整する

予想されるユーザーの行動を特定する

ユーザーが実行するクエリの種類を予測することは、スキーマの作成戦略につながります。

たとえば、映画データベースに対してクエリを発行する場合、ユーザーが「ロバート・レッドフォード」を主演するすべての映画を表示して、したがって、スキーマは「特定のアクターを持つすべての映画」に基づくクエリ結果をサポートする必要があります。

ユーザーの行動パターンを反映するようにスキーマを定義するには、次のタスクを実行することを検討してください。

  1. さまざまなユーザーから要求される多様なクエリを評価します。
  2. クエリで使用される可能性があるオブジェクトを特定します。オブジェクトとは、映画データベース内の映画のような、関連データの論理的集合です。
  3. オブジェクトを構成し、クエリで使用される可能性のあるプロパティと値を特定します。プロパティは、オブジェクトのインデックス可能な属性です。プリミティブ値や他のオブジェクトを含めることができます。たとえば、映画オブジェクトには、映画のタイトルやリリース日などのプロパティがプリミティブ値として含まれている場合があります。また、出演者のように、名前や役柄などの固有のプロパティを持つ他のオブジェクトを含めることもできます。
  4. プロパティの有効な値のサンプルを見つけます。値とは、プロパティに対してインデックス登録される実際のデータのことです。たとえば、データベースには「レイダース / 失われたアーク《聖櫃》」というタイトルの映画が含まれているかもしれません。
  5. ユーザーが希望する並べ替えとランキングのオプションを決定します。たとえば、映画のクエリでは、タイトルでアルファベット順に並べ替えるよりも、年代順に並べ替えて視聴者の評価でランク付けするほうがよい場合があります。
  6. (省略可)プロパティのいずれかが、検索が実行される可能性のあるより具体的なコンテキスト(users.' 職務や部署など)を表しているかどうかを検討して、コンテキストに基づいてオートコンプリートの候補を提供できるようにします。たとえば、映画のデータベースを検索する場合、ユーザーは特定のジャンルの映画のみに関心がある可能性があります。ユーザーは、検索に対して返されるジャンルを、ユーザー プロフィールの一部として定義できます。ユーザーが映画の検索を入力し始めると、「アクション映画」など、希望するジャンルの映画のみがオートコンプリート候補の一部として候補として表示されます。
  7. 検索に使用される可能性があるオブジェクト、プロパティ、サンプル値のリストを作成します(このリストの使用方法については、演算子オプションを定義するのセクションをご覧ください)。

データソースを初期化する

データソースとは、Google Cloud にインデックス登録されて格納されているリポジトリのデータを表します。データソースを初期化する手順については、サードパーティのデータソースを管理するをご覧ください。

ユーザーの検索結果はデータソースから返されます。ユーザーが検索結果をクリックすると、インデックス登録リクエストで指定された URL を使用して実際のアイテムに誘導されます。

オブジェクトを定義する

スキーマ内のデータの基本単位はオブジェクトです。これはデータの論理構造で、「スキーマ オブジェクト」とも呼ばれます。映画のデータベースでは、データの論理構造の 1 つが「movie."」です。別の人物は、映画に登場するキャストやクルーを「人物」として表すことができます。

スキーマ内の個々のオブジェクトに、映画のタイトルや上映時間、人物の名前や生年月日など、そのオブジェクトを構成する一連のプロパティ(属性)があります。オブジェクトのプロパティには、プリミティブ値や他のオブジェクトを含めることができます。

図 1 は、映画オブジェクトと人物オブジェクトおよびそれぞれに関連するプロパティを示しています。

エンティティ間のスキーマ接続の描画
図 1. 2 つのオブジェクトとサブオブジェクトを示すサンプル スキーマ。

Cloud Search スキーマは、基本的に objectDefinitions タグ内で定義されているオブジェクト定義ステートメントのリストです。次のスキーマ スニペットは、映画やテレビ番組のスキーマ オブジェクトの objectDefinitions ステートメントを示しています。

{
  "objectDefinitions": [
    {
      "name": "movie",
      ...
    },
    {
      "name": "person",
      ...
    }
  ]
}

スキーマ オブジェクトを定義する際には、スキーマ内の他のすべてのオブジェクト間で一意である必要がある name をそのオブジェクトに対して指定します。通常は、オブジェクトを説明する name 値(映画オブジェクトの場合は movie など)を使用します。スキーマ サービスは、インデックス登録可能なオブジェクトのキー識別子として name フィールドを使用します。name フィールドの詳細については、オブジェクトの定義をご覧ください。

オブジェクトのプロパティを定義する

ObjectDefinition のリファレンスで指定されているように、オブジェクト名の後に options のセットと propertyDefinitions のリストが続きます。options は、freshnessOptionsdisplayOptions で構成されます。freshnessOptions は、アイテムの鮮度に基づいて検索ランキングを調整するために使用されます。displayOptions は、オブジェクトの検索結果に特定のラベルとプロパティを表示するかどうかを定義するために使用します。

propertyDefinitions セクションでは、映画のタイトルやリリース日など、オブジェクトのプロパティを定義します。

次のスニペットは、movieTitlereleaseDate の 2 つのプロパティを持つ movie オブジェクトを示しています。

{
  "objectDefinitions": [
    {
      "name": "movie",
      "propertyDefinitions": [
        {
          "name": "movieTitle",
          "isReturnable": true,
          "isWildcardSearchable": true,
          "textPropertyOptions": {
            "retrievalImportance": { "importance": "HIGHEST" },
            "operatorOptions": {
              "operatorName": "title"
            }
          },
          "displayOptions": {
            "displayLabel": "Title"
          }
        },
        {
          "name": "releaseDate",
          "isReturnable": true,
          "isSortable": true,
          "datePropertyOptions": {
            "operatorOptions": {
              "operatorName": "released",
              "lessThanOperatorName": "releasedbefore",
              "greaterThanOperatorName": "releasedafter"
            }
          },
          "displayOptions": {
            "displayLabel": "Release date"
          }
      ...
      ]
    }
  ]
}

PropertyDefinition は、次の項目で構成されます。

  • name 文字列。
  • 前のスニペットの isReturnable など、タイプに依存しないオプションのリスト。
  • タイプおよび関連するタイプ固有のオプション(前のスニペットの textPropertyOptionsretrievalImportance など)。
  • プロパティを検索演算子として使用する方法を記述する operatorOptions
  • 1 つ以上の displayOptions(前のスニペットの displayLabel など)。

プロパティの name は、含まれるオブジェクト内で一意にする必要がありますが、他のオブジェクトやサブオブジェクトで同じ名前を使用できます。図 1 では、映画のタイトルと公開日が 2 回定義されています。1 回は movie オブジェクトで、2 回目は person オブジェクトの filmography サブオブジェクトで定義されています。このスキーマは、movieTitle フィールドを再利用するため、次の 2 種類の検索動作をサポートします。

  • ユーザーが映画のタイトルを検索した場合、映画の結果を表示します。
  • ユーザーが映画のタイトルで特定の出演俳優を検索した場合、人物の結果を表示します。

同様に、スキーマは 2 つの movieTitle フィールドと同じ意味を持つため、releaseDate フィールドを再利用します。

独自のスキーマを開発する際には、スキーマで複数回宣言するデータを含む関連項目がリポジトリ内でどのように定義されているかを考慮してください。

型に依存しないオプションを追加する

PropertyDefinition には、データ型に関係なく、すべてのプロパティに共通する一般的な検索機能オプションをリストします。

  • isReturnable - プロパティで返されるデータを、Query API を介して返す必要があるデータを識別するかどうかを示します。すべての映画プロパティは戻り値になります。逆に、ユーザーに返さないプロパティは、結果を検索したり、ランク付けしたりするために使用できます。
  • isRepeatable - プロパティに複数の値を使用できるかどうかを示します。たとえば、映画の公開日は 1 つしかありませんが、俳優は複数人いることが考えられます。
  • isSortable - プロパティが並べ替えに使用できることを示します。繰り返し可能なプロパティに対しては true に設定することはできません。たとえば、映画の結果は、公開日または視聴率によって並べ替えることができます。
  • isFacetable - プロパティをファセットの生成に使用できることを示します。ファセットを使用して検索結果を絞り込み、ユーザーが最初の結果を確認してから条件(ファセット)を追加して、結果をさらに絞り込みます。オブジェクトがオブジェクト型のプロパティの場合はこのオプションを true にできません。また、このオプションを設定するには、isReturnable を true にする必要があります。最後に、このオプションは列挙、ブール値、テキストのプロパティでのみサポートされています。たとえば、サンプル スキーマでは、genreactorNameuserRatingmpaaRating をファセットとして使用し、検索結果をインタラクティブに絞り込むことができます。
  • isWildcardSearchable は、このプロパティのワイルドカード検索をユーザーができることを示します。このオプションは、テキスト プロパティでのみ使用できます。テキスト フィールドでのワイルドカード検索の仕組みは、exactMatchWithOperator フィールドに設定された値によって異なります。exactMatchWithOperatortrue に設定されている場合、テキスト値は 1 つのアトミック値としてトークン化され、それに対してワイルドカード検索が実行されます。たとえば、テキスト値が science-fiction の場合、ワイルドカード クエリ science-* がそれに一致します。exactMatchWithOperatorfalse に設定されている場合、テキスト値はトークン化され、各トークンに対してワイルドカード検索が実行されます。たとえば、テキスト値が &SF の場合、ワイルドカード クエリ sci* または fi* はアイテムと一致しますが、science-* は一致しません。

一般的な検索機能のパラメータはすべてブール値です。すべてのデフォルト値は false です。使用するには true に設定する必要があります。

次の表に、movie オブジェクトのすべてのプロパティのうち、true に設定されているブール値パラメータを示します。

プロパティ isReturnable isRepeatable isSortable isFacetable isWildcardSearchable
movieTitle true true
releaseDate true true
genre true true true
duration true
actorName true true true true
userRating true true
mpaaRating true true

genreactorName はいずれも、isRepeatabletrue に設定されています。これは、映画が複数のジャンルに属していて、通常は複数の俳優が出演している可能性があるためです。プロパティが繰り返し可能であるか、繰り返し可能なサブオブジェクトに含まれている場合は、そのプロパティを並べ替えることはできません。

型を定義する

PropertyDefinition リファレンス セクションには、複数の xxPropertyOptions がリストされています。xxboolean などの特定の型です。プロパティのデータ型を設定するには、適切なデータ型オブジェクトを定義する必要があります。プロパティのデータ型オブジェクトを定義すると、そのプロパティのデータ型が設定されます。たとえば、movieTitle プロパティに textPropertyOptions を定義すると、映画のタイトルがテキストタイプになります。次のスニペットは、textPropertyOptions でデータ型を設定する movieTitle プロパティを示しています。

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    ...
  },
  ...
},

1 つのプロパティには、1 つのデータ型のみを関連付けることができます。たとえば、この映画スキーマでは、releaseDate は日付のみとします(たとえば、2016-01-13 など)または文字列(例:(January 13, 2016 など)。ただし、両方ではありません。

サンプル映画スキーマでは、次のデータ型オブジェクトを使用して各種プロパティのデータ型が指定されています。

プロパティ データ型オブジェクト
movieTitle textPropertyOptions
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions
mpaaRating textPropertyOptions

プロパティに選択するデータ型は、想定されるユースケースによって異なります。この映画スキーマの想定シナリオでは、ユーザーは結果を時系列で並べ替えることを想定されているため、releaseDate は日付オブジェクトです。たとえば、12 月のリリースと 1 月のリリースを比較するユースケースが想定される場合は、文字列形式が便利です。

型固有のオプションを構成する

PropertyDefinition リファレンス セクションは、各型のオプションにリンクしています。enumPropertyOptions 内の possibleValues のリストを除き、ほとんどのタイプ固有のオプションは省略可能です。また、orderedRanking オプションを使用すると、互いに相対的な値をランク付けできます。次のスニペットは、textPropertyOptions でデータ型を設定し、retrievalImportance で型固有のオプションを指定する movieTitle プロパティを示しています。

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    ...
  },
  ...
}

それ以外に、サンプル スキーマで使用されている型固有のオプションは次のとおりです。

プロパティ タイプ 型固有のオプション
movieTitle textPropertyOptions retrievalImportance
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions orderedRankingmaximumValue
mpaaRating textPropertyOptions

演算子オプションを定義する

各タイプには、それぞれ固有のオプションに加えて、オプションの operatorOptions が用意されています。これらのオプションでは、プロパティを検索演算子として使用する方法を記述します。次のスニペットは、textPropertyOptions データ型の設定と、retrievalImportance および operatorOptions タイプ固有のオプションを使用した movieTitle プロパティを示しています。

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
      "operatorName": "title"
    }
  },
  ...
}

すべての operatorOptions には operatorName があります(movieTitletitle など)。演算子名はプロパティの検索演算子です。検索演算子は、ユーザーが検索の絞り込みに使用すると予想される実際のパラメータです。たとえば、タイトルで映画を検索するには、「title:movieName」と入力します。ここで、movieName は映画の名前です。

演算子名をプロパティ名と同じにすることはできません。代わりに、演算子名には、組織内のユーザーが使用する最も一般的な単語を反映する必要があります。たとえば、ユーザーが映画のタイトルを表す用語として「title」ではなく「name」の使用を好む場合は、演算子名を「name」に設定する必要があります。

すべてのプロパティが同じ型に解決される場合に限り、複数のプロパティに対して同じ演算子名を使用できます。クエリの実行時に共有演算子名を使用した場合、その演算子名を使用するすべてのプロパティが取得されます。たとえば、movie オブジェクトに plotSummary プロパティと plotSynopsis プロパティがあり、各プロパティの operatorNameplot であるとします。どちらのプロパティもテキスト(textPropertyOptions)である限り、plot 検索演算子を使用して 1 つのクエリで両方を取得できます。

並べ替え可能なプロパティは、operatorName に加えて、operatorOptionslessThanOperatorName フィールドと greaterThanOperatorName フィールドを持つことができます。ユーザーはこれらのオプションを使用して、登録された値との比較に基づいてクエリを作成できます。

最後に、textOperatorOptionsoperatorOptionsexactMatchWithOperator フィールドがあります。exactMatchWithOperatortrue に設定すると、クエリ文字列はプロパティ値全体に一致する必要があり、テキスト内だけに一致するわけではありません。テキスト値は、演算子の検索とファセット一致で 1 つのアトミック値として扱われます。

たとえば、ジャンルのプロパティを持つ Book または Movie オブジェクトをインデックスに登録することを検討してください。ジャンルには、「SF」や「Science」、および「Fiction」などがあります。exactMatchWithOperatorfalse に設定するか省略した場合、ジャンルを検索するか「Science」または「Fiction」を選択すると、ファセットから「Science-Fiction」の結果も返されます。テキストはトークン化され、「Science」と「Fiction&quot」のトークンが含まれます。exactMatchWithOperatortrue の場合、テキストは単一のトークンとして扱われるため、「Science」と「Fiction」はどちらも「Science-Fiction"」とは一致しません。

(省略可)displayOptions セクションを追加する

propertyDefinition セクションの末尾には、省略可能な displayOptions セクションがあります。このセクションには、1 つの displayLabel 文字列が含まれます。displayLabel は、プロパティのユーザー フレンドリーなテキストラベルにすることをおすすめします。プロパティが ObjectDisplayOptions を使用して表示するように構成されている場合、このラベルはプロパティの前に表示されます。プロパティが表示用に設定されていて、displayLabel が定義されていない場合、プロパティ値のみが表示されます。

次のスニペットは、displayLabel が 'Title' に設定された movieTitle プロパティを示しています。

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
       "operatorName": "title"
    }
},
  "displayOptions": {
    "displayLabel": "Title"
  }
},

次に、サンプル スキーマの movie オブジェクトのすべてのプロパティの displayLabel 値を示します。

プロパティ displayLabel
movieTitle Title
releaseDate Release date
genre Genre
duration Run length
actorName Actor
userRating Audience score
mpaaRating MPAA rating

(省略可)suggestionFilteringOperators[] セクションを追加する

propertyDefinition セクションの末尾には、オプションの suggestionFilteringOperators[] セクションがあります。このセクションを使用して、オートコンプリート候補のフィルタリングに使用するプロパティを定義します。たとえば、genre の演算子を定義して、ユーザーの好みの映画ジャンルに基づいて候補をフィルタリングできます。ユーザーが検索クエリを入力すると、オートコンプリート候補の一部として、指定したジャンルに一致する映画のみが表示されます。

スキーマを登録する

Cloud Search クエリから構造化データが返されるようにするには、Cloud Search スキーマ サービスにスキーマを登録する必要があります。スキーマを登録する際には、データソースを初期化するステップで取得したデータソース ID が必要になります。

データソース ID を使用して、UpdateSchema リクエストを発行してスキーマを登録します。

UpdateSchema リファレンス ページの詳細な説明に従って、次の HTTP リクエストを発行してスキーマを登録します。

PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema

リクエストの本文には、次の内容が含まれている必要があります。

{
  "validateOnly": // true or false,
  "schema": {
    // ... Your complete schema object ...
  }
}

validateOnly オプションを使用して、スキーマを実際に登録せずに有効性をテストします。

データをインデックスに登録する

スキーマの登録後、インデックス呼び出しを使用してデータソースにインデックスを挿入します。インデックス登録は通常、コンテンツ コネクタ内で行われます。

映画スキーマでは、1 つの映画に対する REST API インデックス登録リクエストは次のようになります。

{
  "name": "datasource/<data_source_id>/items/titanic",
  "acl": {
    "readers": [
      {
        "gsuitePrincipal": {
          "gsuiteDomain": true
        }
      }
    ]
  },
  "metadata": {
    "title": "Titanic",
    "sourceRepositoryUrl": "http://www.imdb.com/title/tt2234155/?ref_=nv_sr_1",
    "objectType": "movie"
  },
  "structuredData": {
    "object": {
      "properties": [
        {
          "name": "movieTitle",
          "textValues": {
            "values": [
              "Titanic"
            ]
          }
        },
        {
          "name": "releaseDate",
          "dateValues": {
            "values": [
              {
                "year": 1997,
                "month": 12,
                "day": 19
              }
            ]
          }
        },
        {
          "name": "actorName",
          "textValues": {
            "values": [
              "Leonardo DiCaprio",
              "Kate Winslet",
              "Billy Zane"
            ]
          }
        },
        {
          "name": "genre",
          "enumValues": {
            "values": [
              "Drama",
              "Action"
            ]
          }
        },
        {
          "name": "userRating",
          "integerValues": {
            "values": [
              8
            ]
          }
        },
        {
          "name": "mpaaRating",
          "textValues": {
            "values": [
              "PG-13"
            ]
          }
        },
        {
          "name": "duration",
          "textValues": {
            "values": [
              "3 h 14 min"
            ]
          }
        }
      ]
    }
  },
  "content": {
    "inlineContent": "A seventeen-year-old aristocrat falls in love with a kind but poor artist aboard the luxurious, ill-fated R.M.S. Titanic.",
    "contentFormat": "TEXT"
  },
  "version": "01",
  "itemType": "CONTENT_ITEM"
}

objectType フィールドの値の movie が、スキーマ内のオブジェクト定義名と一致していることに注意してください。Cloud Search では、これらの 2 つの値の対応付けに基づいて、インデックス登録時に使用するスキーマ オブジェクトが認識されます。

また、スキーマ プロパティ releaseDate のインデックス登録では、yearmonthday のサブプロパティが使用されます。これは、datePropertyOptions を使用して定義することにより、date データ型として定義されるためです。ただし、yearmonthday はスキーマで定義されていないため、これらのプロパティのいずれかに対してクエリを実行できません(year)。

また、値のリストを使用して、反復可能なプロパティ actorName がインデックスに登録される方法にも注意してください。

インデックス登録における潜在的な問題を特定する

スキーマとインデックス登録に関する最も一般的な問題として、次の 2 つがあります。

  • スキーマ サービスに登録されていないスキーマ オブジェクト名またはプロパティ名がインデックス登録リクエストに含まれている。この問題が原因で、プロパティまたはオブジェクトが無視されます。

  • スキーマに登録されている型と異なる型を持つプロパティがインデックス登録リクエストに含まれている。この問題が原因で、インデックス登録時にエラーが返されます。

複数のクエリ形式を使用してスキーマをテストする

大規模な本番環境データ リポジトリ用にスキーマを登録する際には、より小さなテストデータ リポジトリでテストすることを検討してください。小さいテスト リポジトリでテストすることで、より大きなインデックスや既存の本番環境インデックスに影響を与えることなく、スキーマをすばやく調整したり、インデックス登録済みデータを削除できます。テスト用データ リポジトリでは、テストユーザーのみを承認する ACL を作成し、他のユーザーに対してはこのデータが検索結果に表示されないようにできます。

検索クエリを検証するための検索インターフェースを作成する方法については、検索インターフェースをご覧ください。

このセクションでは、映画スキーマをテストするために使用できるいくつかの異なるクエリを例として紹介しています。

一般的なクエリを使用してテストする

一般的なクエリとは、データソース内のアイテムのうち特定の文字列を含むすべてのアイテムを返すものです。たとえば、検索インターフェースで「titanic」という単語を入力して Return キーを押すことによって、映画データソースに対して一般的なクエリを実行できます。「titanic」という単語を含むすべての映画が検索結果として返されるはずです。

演算子を使用してテストする

クエリに演算子を追加すると、その演算子の値に一致するアイテムに結果が制限されます。たとえば、actor 演算子を使用して、特定の俳優が主演しているすべての映画を見つけることができます。検索インターフェースを使用してこの演算子を実行するには、operator=value ペア("actor:Zane" など)を入力し、Return キーを押します。俳優 Zane が主演するすべての映画が検索結果として返されるはずです。

スキーマを調整する

スキーマとデータの使用が開始された後も、ユーザーに対してうまく機能する部分とそうでない部分を引き続き監視します。次のような状況では、スキーマを調整することを検討してください。

  • 以前にインデックスに登録しなかった項目をインデックスに登録します。たとえば、監督名で映画を検索するユーザーが多い場合は、演算子として監督名をサポートするようにスキーマを調整します。
  • ユーザーのフィードバックに基づいて検索演算子名を変更します。演算子名はユーザーにとってわかりやすいものでなければなりません。ユーザーが間違った演算子名を覚えたまま直らない場合は、その名前を変更することを検討します。

スキーマ変更後の再インデックス登録

スキーマ内の次の値を変更しても、データの再インデックス登録が必要になることはありません。新しい UpdateSchema リクエストを送信するだけで、インデックスは引き続き機能します。

  • 演算子名。
  • 整数の最小値と最大値。
  • 整数型と列挙型の順位付け。
  • 更新頻度オプション。
  • 表示オプション。

次の変更を行った場合でも、インデックス登録済みデータは引き続き元の登録済みスキーマに従って動作します。ただし、このような変更を更新後のスキーマに基づいて表示するには、既存のエントリの再インデックス登録が必要になります。

  • 新しいプロパティまたはオブジェクトを追加または削除する。
  • isReturnableisFacetable、または isSortablefalse から true に変更する。

ユースケースが明確で必要な場合にのみ、isFacetable または isSortabletrue に設定します。

最後に、プロパティ isSuggestable をマークしてスキーマを更新した場合、データのインデックスを再登録する必要があります。これにより、そのプロパティのオートコンプリートの使用が遅れます。

禁止されているプロパティ変更

スキーマに対する一部の変更は、データの再インデックス登録を行うかどうかに関係なく禁止されています。変更すると、インデックスが破損したり、検索結果の精度や一貫性が失われたりします。該当する変更は次のとおりです。

  • プロパティのデータ型。
  • プロパティ名。
  • exactMatchWithOperator の設定。
  • retrievalImportance の設定。

ただし、この制限を回避する方法はあります。

複雑なスキーマ変更を行う

検索結果の精度低下や検索インデックスの破損を引き起こす変更を回避するために、Cloud Search では、リポジトリのインデックス登録後に UpdateSchema リクエストによって特定の種類の変更を行うことが禁止されています。たとえば、プロパティのデータ型または名前は、一度設定したら以後変更できなくなります。これらの変更は、データをインデックスに再登録しても、単純な UpdateSchema リクエストでは実現できません。

スキーマに対して禁止されている変更をどうしても加える変更がある場合は、通常、許可されている一連の変更を通じて同じ結果を実現できます。そのためには、一般に、最初にインデックス登録済みのプロパティを古いオブジェクト定義から新しいオブジェクト定義に移行してから、新しいプロパティのみを使用するインデックス登録リクエストを送信します。

プロパティのデータ型または名前を変更する手順は次のとおりです。

  1. スキーマのオブジェクト定義に新しいプロパティを追加します。変更対象のプロパティとは異なる名前を使用します。
  2. 新しい定義で UpdateSchema リクエストを発行します。リクエストでは、新しいプロパティと古いプロパティの両方を含むスキーマ全体を送信してください。
  3. データ リポジトリからインデックスをバックフィルします。インデックスをバックフィルするには、古いプロパティは使用せず、新しいプロパティのみを使用してすべてのインデックス登録リクエストを送信します。そうしないと、クエリに対する一致件数が 2 倍になるためです。

    1. インデックスのバックフィル時には、新しいプロパティをチェックし、古いプロパティをデフォルトに設定することで、動作の一貫性が失われないようにします。
    2. バックフィルが完了したら、テストクエリを実行して検証します。
  4. 古いプロパティを削除します。古いプロパティ名を含まない別の UpdateSchema リクエストを発行し、今後のインデックス登録リクエストでは古いプロパティ名の使用を中止します。

  5. 古いプロパティの代わりに新しいプロパティを使用するように移行します。たとえば、プロパティ名を creator から author に変更する場合は、これまで creator を参照していた部分で author を使用するようにクエリコードを更新する必要があります。

Cloud Search は、削除したプロパティまたはオブジェクトのレコードを 30 日間保持し、予期しないインデックス登録結果を招くような再利用から保護します。30 日以内に、将来のインデックス リクエストを含め、削除されたオブジェクトまたはプロパティのすべての使用から移行する必要があります。これにより、後でそのプロパティまたはオブジェクトを再度指定する場合に、インデックスの正確性を維持できます。

サイズ制限を把握する

Cloud Search では、構造化データ オブジェクトとスキーマのサイズに制限があります。これらの上限は次のとおりです。

  • 最上位のオブジェクトの最大数は 10 個です。
  • 構造化データ階層の最大深度は 10 レベルです。
  • オブジェクト内の項目の合計数は 1,000 個に制限されています。これは、プリミティブ項目の数に、ネストされた各オブジェクト内の項目数の合計を加えたものです。

次の手順

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

  1. スキーマをテストする検索インターフェースを作成します。

  2. 検索品質の向上のためにスキーマを調整します。

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

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

  5. コネクタを作成します。