Azure Cognitive Search でインデクサーを使用して Cosmos DB データのインデックスを作成する方法How to index Cosmos DB data using an indexer in Azure Cognitive Search

重要

SQL API は一般提供されています。SQL API is generally available. MongoDB API、Gremlin API、Cassandra API のサポートは現在、パブリック プレビューの段階です。MongoDB API, Gremlin API, and Cassandra API support are currently in public preview. プレビュー段階の機能はサービス レベル アグリーメントなしで提供しています。運用環境のワークロードに使用することはお勧めできません。Preview functionality is provided without a service level agreement, and is not recommended for production workloads. 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。For more information, see Supplemental Terms of Use for Microsoft Azure Previews. プレビュー機能に対するアクセスの要求は、こちらのフォームに必要事項を入力して行うことができます。You can request access to the previews by filling out this form. プレビュー機能は REST API バージョン 2019-05-06-Preview で提供しています。The REST API version 2019-05-06-Preview provides preview features. 現時点でポータルによるサポートは一部のみにとどまります。また、.NET SDK によるサポートはありません。There is currently limited portal support, and no .NET SDK support.

この記事では、コンテンツを抽出して Azure Cognitive Search で検索できるようにするために Azure Cosmos DB インデクサーを構成する方法を説明します。This article shows you how to configure an Azure Cosmos DB indexer to extract content and make it searchable in Azure Cognitive Search. このワークフローでは、Azure Cognitive Search インデックスを作成して、Azure Cosmos DB から抽出された既存のテキストと共に読み込みます。This workflow creates an Azure Cognitive Search index and loads it with existing text extracted from Azure Cosmos DB.

用語が混乱を招く可能性があるため、Azure Cosmos DB のインデックス作成Azure Cognitive Search のインデックス作成はそれぞれのサービスに固有の異なる操作であることに注意してください。Because terminology can be confusing, it's worth noting that Azure Cosmos DB indexing and Azure Cognitive Search indexing are distinct operations, unique to each service. Azure Cognitive Search のインデックス作成を開始するには、Azure Cosmos DB データベースが既に存在していて、データが格納されている必要があります。Before you start Azure Cognitive Search indexing, your Azure Cosmos DB database must already exist and contain data.

Azure Cognitive Search の Cosmos DB インデクサーでは、アクセスのためのプロトコルがさまざまに異なる Azure Cosmos DB 項目をクロールできます。The Cosmos DB indexer in Azure Cognitive Search can crawl Azure Cosmos DB items accessed through different protocols.

注意

Azure Cognitive Search で Table API をサポートしてほしいという方は、こちらのユーザーの意見に賛成の票を投じてください。You can cast a vote on User Voice for the Table API if you'd like to see it supported in Azure Cognitive Search.

ポータルの使用Use the portal

注意

ポータルでは現在、SQL API と MongoDB API (プレビュー) をサポートしています。The portal currently supports the SQL API and MongoDB API (preview).

Azure Cosmos DB 項目のインデックスを作成する最も簡単な方法は、Azure portal 内のウィザードを使用することです。The easiest method for indexing Azure Cosmos DB items is to use a wizard in the Azure portal. コンテナー内のデータをサンプリングしてメタデータを解析することにより、Azure Cognitive Search のデータのインポートウィザードでは、既定のインデックスを作成し、ソース フィールドをターゲット インデックス フィールドにマップし、1 回の操作でインデックスを読み込むことができます。By sampling data and reading metadata on the container, the Import data wizard in Azure Cognitive Search can create a default index, map source fields to target index fields, and load the index in a single operation. ソース データのサイズと複雑さによっては、数分で運用可能なフルテキスト検索インデックスを作成できます。Depending on the size and complexity of source data, you could have an operational full text search index in minutes.

Azure Cognitive Search と Azure Cosmos DB の両方で、可能であれば同じリージョンで、同じ Azure サブスクリプションを使用することをお勧めします。We recommend using the same Azure subscription for both Azure Cognitive Search and Azure Cosmos DB, preferably in the same region.

1 - ソース データを準備する1 - Prepare source data

Cosmos DB アカウント、SQL API、MongoDB API (プレビュー)、または Gremlin API (プレビュー) にマップされた Azure Cosmos DB データベース、およびデータベース内のコンテンツが必要です。You should have a Cosmos DB account, an Azure Cosmos DB database mapped to the SQL API, MongoDB API (preview), or Gremlin API (preview), and content in the database.

Cosmos DB データベースにデータが含まれることを確認してください。Make sure your Cosmos DB database contains data. データのインポート ウィザードでは、メタデータが読み取られ、インデックス スキーマを推論するためにデータのサンプリングが実行されますが、Cosmos DB からもデータが読み込まれます。The Import data wizard reads metadata and performs data sampling to infer an index schema, but it also loads data from Cosmos DB. このデータが見つからない場合、ウィザードは "データ ソースからインデックス スキーマを削除するときにエラーが発生しました:データソース 'emptycollection' がデータを返さなかったため、プロトタイプ インデックスを構築できませんでした" というエラーで停止します。If the data is missing, the wizard stops with this error "Error detecting index schema from data source: Could not build a prototype index because datasource 'emptycollection' returned no data".

2 - データのインポート ウィザードを開始する2 - Start Import data wizard

Azure Cognitive Search サービス ページのコマンド バーからウィザードを開始できます。このほか、Cosmos DB SQL API に接続する場合には、Cosmos DB アカウントの左側のナビゲーション ペインにある [設定] セクションで [Add Azure Cognitive Search](Azure Cognitive Search の追加) をクリックする方法も利用できます。You can start the wizard from the command bar in the Azure Cognitive Search service page, or if you're connecting to Cosmos DB SQL API you can click Add Azure Cognitive Search in the Settings section of your Cosmos DB account's left navigation pane.

ポータルの [データのインポート] コマンドImport data command in portal

3 - データ ソースを設定する3 - Set the data source

データソースのページでは、ソースが次のように指定された Cosmos DB になっている必要があります。In the data source page, the source must be Cosmos DB, with the following specifications:

  • [名前] は データ ソースの名前です。Name is the name of the data source object. 作成されたら、その他のワークロード用に選択できます。Once created, you can choose it for other workloads.

  • [Cosmos DB アカウント] は、AccountEndpointAccountKey を含む、Cosmos DB からのプライマリまたはセカンダリの接続文字列である必要があります。Cosmos DB account should be the primary or secondary connection string from Cosmos DB, with an AccountEndpoint and an AccountKey. MongoDB コレクションの場合には、接続文字列末尾に ApiKind=MongoDb を追加します。この文字列と接続文字列の間にはセミコロンを挿入してください。For MongoDB collections, add ApiKind=MongoDb to the end of the connection string and separate it from the connection string with a semicolon. Gremlin API と Cassandra API の場合には、REST API 向けの手順を使用します。For the Gremlin API and Cassandra API, use the instructions for the REST API.

  • [データベース] は、アカウントからの既存のデータベースです。Database is an existing database from the account.

  • [コレクション] はドキュメントのコンテナーです。Collection is a container of documents. インポートが成功するためには、ドキュメントが存在している必要があります。Documents must exist in order for import to succeed.

  • [クエリ] は、すべてのドキュメントが必要な場合は空にすることができます。それ以外の場合は、ドキュメントのサブセットを選択するクエリを入力できます。Query can be blank if you want all documents, otherwise you can input a query that selects a document subset. [クエリ] は SQL API の場合にのみ利用できます。Query is only available for the SQL API.

    Cosmos DB データ ソースの定義Cosmos DB data source definition

4 - ウィザードの [認知検索を追加します] ページをスキップする4 - Skip the "Add cognitive search" page in the wizard

ドキュメントをインポートするときは、コグニティブ スキルを追加する必要はありません。Adding cognitive skills is not necessary for document import. 特別に AI エンリッチメントを追加する必要がない場合は、この手順を省略してください。Unless you have a specific need to add AI enrichment to your indexing pipeline, you should skip this step.

このステップをスキップするには、先に次のページに移動します。To skip the step, first go to the next page.

スキルを追加する [次のページ] ボタン

そのページから、インデックスのカスタマイズに進むことができます。From that page you can skip ahead to index customization.

コグニティブ スキル手順のスキップ

5 - インデックスの属性を設定する5 - Set index attributes

[インデックス] ページには、フィールドとデータ型およびインデックスの属性を設定するための一連のチェック ボックスが一覧表示されます。In the Index page, you should see a list of fields with a data type and a series of checkboxes for setting index attributes. このウィザードで、メタデータに基づいてソース データをサンプリングすることで、フィールドの一覧を生成できます。The wizard can generate a fields list based on metadata and by sampling the source data.

属性列の上部にあるチェック ボックスをクリックすることで、属性を一括選択できます。You can bulk-select attributes by clicking the checkbox at the top of an attribute column. クライアント アプリに返してフル検索処理の対象にする必要があるすべてのフィールドで、 [取得可能][検索可能] を選択します。Choose Retrievable and Searchable for every field that should be returned to a client app and subject to full text search processing. 整数はフルテキスト検索もあいまい検索もできないことに注意してください (数値は逐語的に評価され、多くの場合フィルターで役立ちます)。You'll notice that integers are not full text or fuzzy searchable (numbers are evaluated verbatim and are often useful in filters).

詳細については、インデックス属性言語アナライザーの説明を参照してください。Review the description of index attributes and language analyzers for more information.

時間をかけて選択内容を確認します。Take a moment to review your selections. ウィザードを実行すると、物理データ構造が作成されて、すべてのオブジェクトを削除して再作成しない限り、これらのフィールドを編集することはできません。Once you run the wizard, physical data structures are created and you won't be able to edit these fields without dropping and recreating all objects.

Cosmos DB インデックスの定義Cosmos DB index definition

6 - インデクサーを作成する6 - Create indexer

完全に指定すると、ウィザードによって検索サービスに 3 つの異なるオブジェクトが作成されます。Fully specified, the wizard creates three distinct objects in your search service. データ ソース オブジェクトとインデックス オブジェクトは、Azure Cognitive Search サービスに名前付きリソースとして保存されます。A data source object and index object are saved as named resources in your Azure Cognitive Search service. 最後のステップでは、インデクサー オブジェクトが作成されます。The last step creates an indexer object. インデクサーに名前を付けると、インデクサーはスタンドアロン リソースとして存在することができ、同じウィザードのシーケンスで作成されるインデックス オブジェクトやデータ ソース オブジェクトとは独立して、スケジュールを設定したり管理したりできます。Naming the indexer allows it to exist as a standalone resource, which you can schedule and manage independently of the index and data source object, created in the same wizard sequence.

インデクサーに慣れていないユーザーのために説明すると、"インデクサー" とは Azure Cognitive Search のリソースであり、外部データ ソースで検索可能なコンテンツのクロールを行います。If you are not familiar with indexers, an indexer is a resource in Azure Cognitive Search that crawls an external data source for searchable content. データのインポート ウィザードで出力されるインデクサーでは、Cosmos DB データ ソースがクロールされ、検索可能なコンテンツが抽出されて、Azure Cognitive Search のインデックスにインポートされます。The output of the Import data wizard is an indexer that crawls your Cosmos DB data source, extracts searchable content, and imports it into an index on Azure Cognitive Search.

次のスクリーンショットは、既定のインデクサー構成を示しています。The following screenshot shows the default indexer configuration. インデクサーを 1 回だけ実行する場合は、 [1 度] に切り替えることができます。You can switch to Once if you want to run the indexer one time. [送信] をクリックしてウィザードを実行し、すべてのオブジェクトを作成します。Click Submit to run the wizard and create all objects. インデックスの作成はすぐに開始されます。Indexing commences immediately.

Cosmos DB インデクサーの定義Cosmos DB indexer definition

ポータルのページでデータのインポートを監視することができます。You can monitor data import in the portal pages. 進行状況の通知では、インデックス作成の状態と、アップロードされたドキュメントの数が示されます。Progress notifications indicate indexing status and how many documents are uploaded.

インデックスの作成が完了したら、Search エクスプローラーを使用してインデックスのクエリを実行できます。When indexing is complete, you can use Search explorer to query your index.

注意

期待どおりのデータが表示されない場合は、その他のフィールドにその他の属性を設定する必要があります。If you don't see the data you expect, you might need to set more attributes on more fields. 今作成したインデックスとインデクサーを削除し、もう一度ウィザードの手順に従って、手順 5 でインデックス属性の選択内容を変更してください。Delete the index and indexer you just created, and step through the wizard again, modifying your selections for index attributes in step 5.

REST API の使用Use REST APIs

REST API を使用して、Azure Cognitive Search のすべてのインデクサーに共通する 3 部構成のワークフロー (データ ソースを作成し、インデックスを作成して、インデクサーを作成する) で、Azure Cosmos DB データのインデックスを作成できます。You can use the REST API to index Azure Cosmos DB data, following a three-part workflow common to all indexers in Azure Cognitive Search: create a data source, create an index, create an indexer. Cosmos DB からのデータ抽出は、インデクサーの作成要求を送信した時点で発生します。Data extraction from Cosmos DB occurs when you submit the Create Indexer request. この要求が完了すると、クエリ可能なインデックスが作成されます。After this request is finished, you will have a queryable index.

注意

Cosmos DB Gremlin API または Cosmos DB Cassandra API からデータのインデックスを作成するためには、まずこちらのフォームに必要事項を入力し、限定プレビュー機能に対するアクセスを要求する必要があります。For indexing data from Cosmos DB Gremlin API or Cosmos DB Cassandra API you must first request access to the gated previews by filling out this form. 要求が処理されると、REST API バージョン 2019-05-06-Preview を使ってデータ ソースを作成する手順の案内が届きます。Once your request is processed, you will receive instructions for how to use the REST API version 2019-05-06-Preview to create the data source.

この記事の前の方で、Azure Cosmos DB のインデックス作成Azure Cognitive Search のインデックス作成が異なる操作であると説明しました。Earlier in this article it is mentioned that Azure Cosmos DB indexing and Azure Cognitive Search indexing indexing are distinct operations. Cosmos DB のインデックス作成では、既定ですべてのドキュメントのインデックスが自動的に作成されます (Cassandra API の場合を除きます)。For Cosmos DB indexing, by default all documents are automatically indexed except with the Cassandra API. インデックスの自動作成を無効にすると、ドキュメント ID を使用したクエリまたは自己リンクでのみドキュメントにアクセスできるようになります。If you turn off automatic indexing, documents can be accessed only through their self-links or by queries by using the document ID. Azure Cognitive Search のインデックス作成では、Azure Cognitive Search によってインデックスが作成されるコレクションで、Cosmos DB の自動インデックス作成が有効になっている必要があります。Azure Cognitive Search indexing requires Cosmos DB automatic indexing to be turned on in the collection that will be indexed by Azure Cognitive Search. Cosmos DB Cassandra API インデクサーのプレビューにサインアップした場合には、Cosmos DB のインデックス作成の設定手順に関する案内が届きます。When signing up for the Cosmos DB Cassandra API indexer preview, you'll be given instructions on how set up Cosmos DB indexing.

警告

Azure Cosmos DB とは、次世代の DocumentDB です。Azure Cosmos DB is the next generation of DocumentDB. 以前の API バージョン 2017-11-11 では、documentdb 構文を使用できました。Previously with API version 2017-11-11 you could use the documentdb syntax. つまり、データ ソースの種類を cosmosdb または documentdb として指定することができました。This meant that you could specify your data source type as cosmosdb or documentdb. API バージョン 2019-05-06 以降では、この記事で説明するように、Azure Cognitive Search API とポータルの両方で cosmosdb 構文のみがサポートされるようになりました。Starting with API version 2019-05-06 both the Azure Cognitive Search APIs and Portal only support the cosmosdb syntax as instructed in this article. つまり、Cosmos DB エンドポイントに接続する場合場合、データ ソースの種類は cosmosdb でなければなりません。This means that the data source type must cosmosdb if you would like to connect to a Cosmos DB endpoint.

1 - 要求に対する入力をアセンブルする1 - Assemble inputs for the request

要求ごとに、Azure Cognitive Search サービス名と管理者キーを (POST ヘッダーに) 指定し、BLOB ストレージのストレージ アカウント名とキーを指定する必要があります。For each request, you must provide the service name and admin key for Azure Cognitive Search (in the POST header), and the storage account name and key for blob storage. Postman を使用して、Azure Cognitive Search に HTTP 要求を送信できます。You can use Postman to send HTTP requests to Azure Cognitive Search.

次の 4 つの値をメモ帳にコピーして、要求に貼り付けることができるようにします。Copy the following four values into Notepad so that you can paste them into a request:

  • Azure Cognitive Search サービス名Azure Cognitive Search service name
  • Azure Cognitive Search の管理者キーAzure Cognitive Search admin key
  • Cosmos DB の接続文字列Cosmos DB connection string

これらの値は、ポータルで調べることができます。You can find these values in the portal:

  1. Azure Cognitive Search のポータル ページで、[概要] ページから Search サービスの URL をコピーします。In the portal pages for Azure Cognitive Search, copy the search service URL from the Overview page.

  2. 左側のナビゲーション ウィンドウで [キー] をクリックし、プライマリまたはセカンダリのいずれかのキー (どちらも働きは同じです) をコピーします。In the left navigation pane, click Keys and then copy either the primary or secondary key (they are equivalent).

  3. Cosmos ストレージ アカウントのポータル ページに切り替えます。Switch to the portal pages for your Cosmos storage account. 左側のナビゲーション ウィンドウで、 [設定][キー] をクリックします。In the left navigation pane, under Settings, click Keys. このページには、1 つの URI、2 組の接続文字列、および 2 組のキーが表示されます。This page provides a URI, two sets of connection strings, and two sets of keys. 接続文字列のいずれかをメモ帳にコピーします。Copy one of the connection strings to Notepad.

2 - データ ソースを作成する2 - Create a data source

データ ソースは、インデックスを作成するデータ、資格情報、およびデータの変更を識別するためのポリシー (コレクション内の変更または削除されたドキュメントなど) を指定します。A data source specifies the data to index, credentials, and policies for identifying changes in the data (such as modified or deleted documents inside your collection). データ ソースは、複数のインデクサーから使用できるように、独立したリソースとして定義します。The data source is defined as an independent resource so that it can be used by multiple indexers.

データ ソースを作成するには、POST 要求を作成します。To create a data source, formulate a POST request:

POST https://[service name].search.windows.net/datasources?api-version=2019-05-06
Content-Type: application/json
api-key: [Search service admin key]

{
    "name": "mycosmosdbdatasource",
    "type": "cosmosdb",
    "credentials": {
        "connectionString": "AccountEndpoint=https://myCosmosDbEndpoint.documents.azure.com;AccountKey=myCosmosDbAuthKey;Database=myCosmosDbDatabaseId"
    },
    "container": { "name": "myCollection", "query": null },
    "dataChangeDetectionPolicy": {
        "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName": "_ts"
    }
}

要求の本文には、次のフィールドを含むデータ ソースの定義が含まれている必要があります。The body of the request contains the data source definition, which should include the following fields:

フィールドField 説明Description
namename 必須。Required. データ ソース オブジェクトを表す名前を選択します。Choose any name to represent your data source object.
typetype 必須。Required. cosmosdbである必要があります。Must be cosmosdb.
credentialscredentials 必須。Required. Cosmos DB の接続文字列でなければなりません。Must be a Cosmos DB connection string.
SQL コレクションでは、接続文字列の形式は AccountEndpoint=<Cosmos DB endpoint url>;AccountKey=<Cosmos DB auth key>;Database=<Cosmos DB database id> ですFor SQL collections, connection strings are in this format: AccountEndpoint=<Cosmos DB endpoint url>;AccountKey=<Cosmos DB auth key>;Database=<Cosmos DB database id>

MongoDB コレクションの場合は、ApiKind=MongoDb を接続文字列に追加します。For MongoDB collections, add ApiKind=MongoDb to the connection string:
AccountEndpoint=<Cosmos DB endpoint url>;AccountKey=<Cosmos DB auth key>;Database=<Cosmos DB database id>;ApiKind=MongoDb

Gremlin グラフと Cassandra テーブルの場合には、インデクサーの限定プレビューにサインアップして、プレビュー機能に対するアクセス権と、資格情報の形式に関する情報を入手してください。For Gremlin graphs and Cassandra tables, sign up for the gated indexer preview to get access to the preview and information about how to format the credentials.

エンドポイント URL では、ポート番号の使用を避けてください。Avoid port numbers in the endpoint url. ポート番号を含めると、Azure Cognitive Search では、Azure Cosmos DB データベースのインデックスを作成できなくなります。If you include the port number, Azure Cognitive Search will be unable to index your Azure Cosmos DB database.
containercontainer 次の要素が含まれます。Contains the following elements:
name:必須。name: Required. インデックスを作成するデータベース コレクションの ID を指定します。Specify the ID of the database collection to be indexed.
query: 省略可能。query: Optional. 任意の JSON ドキュメントを、Azure Cognitive Search がインデックスを作成できるフラット スキーマにフラット化するクエリを指定できます。You can specify a query to flatten an arbitrary JSON document into a flat schema that Azure Cognitive Search can index.
MongoDB API、Gremlin API、Cassandra API では現在、クエリがサポートされていません。For the MongoDB API, Gremlin API, and Cassandra API, queries are not supported.
dataChangeDetectionPolicydataChangeDetectionPolicy 推奨。Recommended. 変更されたドキュメントのインデックス作成」セクションを参照してください。See Indexing Changed Documents section.
dataDeletionDetectionPolicydataDeletionDetectionPolicy 省略可能。Optional. 削除されたドキュメントのインデックス作成」セクションを参照してください。See Indexing Deleted Documents section.

インデックス作成するデータの処理にクエリを活用するUsing queries to shape indexed data

SQL クエリを指定すると、ネストされたプロパティや配列のフラット化、JSON プロパティのプロジェクション、インデックスを作成するデータのフィルター処理を行うことができます。You can specify a SQL query to flatten nested properties or arrays, project JSON properties, and filter the data to be indexed.

警告

MongoDB APIGremlin APICassandra APIについては、カスタム クエリがサポートされていません。container.query パラメーターは null を設定するか、省略する必要があります。Custom queries are not supported for MongoDB API, Gremlin API, and Cassandra API: container.query parameter must be set to null or omitted. カスタム クエリを使用する必要がある場合は、ユーザーの声 Web サイトでお知らせください。If you need to use a custom query, please let us know on User Voice.

ドキュメントのサンプル:Example document:

{
    "userId": 10001,
    "contact": {
        "firstName": "andy",
        "lastName": "hoh"
    },
    "company": "microsoft",
    "tags": ["azure", "cosmosdb", "search"]
}

フィルター処理クエリ:Filter query:

SELECT * FROM c WHERE c.company = "microsoft" and c._ts >= @HighWaterMark ORDER BY c._ts

平坦化クエリ:Flattening query:

SELECT c.id, c.userId, c.contact.firstName, c.contact.lastName, c.company, c._ts FROM c WHERE c._ts >= @HighWaterMark ORDER BY c._ts

プロジェクション クエリ:Projection query:

SELECT VALUE { "id":c.id, "Name":c.contact.firstName, "Company":c.company, "_ts":c._ts } FROM c WHERE c._ts >= @HighWaterMark ORDER BY c._ts

配列を平坦化するクエリ:Array flattening query:

SELECT c.id, c.userId, tag, c._ts FROM c JOIN tag IN c.tags WHERE c._ts >= @HighWaterMark ORDER BY c._ts

3 - ターゲット検索インデックスを作成する3 - Create a target search index

まだない場合は、ターゲットの Azure Cognitive Search インデックスを作成します。Create a target Azure Cognitive Search index if you don’t have one already. 次の例では、ID と説明のフィールドを持つインデックスを作成します。The following example creates an index with an ID and description field:

POST https://[service name].search.windows.net/indexes?api-version=2019-05-06
Content-Type: application/json
api-key: [Search service admin key]

{
   "name": "mysearchindex",
   "fields": [{
     "name": "id",
     "type": "Edm.String",
     "key": true,
     "searchable": false
   }, {
     "name": "description",
     "type": "Edm.String",
     "filterable": false,
     "sortable": false,
     "facetable": false,
     "suggestions": true
   }]
 }

ターゲット インデックスのスキーマがソース JSON ドキュメントのスキーマまたはカスタムのクエリ プロジェクションの出力と互換性があることを確認します。Ensure that the schema of your target index is compatible with the schema of the source JSON documents or the output of your custom query projection.

注意

パーティション分割されたコレクションの場合、既定のドキュメント キーは Azure Cosmos DB の _rid プロパティですが、フィールド名の先頭にはアンダースコア文字を使用できないため、この名前は Azure Cognitive Search によって rid に自動的に変更されます。For partitioned collections, the default document key is Azure Cosmos DB's _rid property, which Azure Cognitive Search automatically renames to rid because field names cannot start with an underscore character. また、Azure Cosmos DB の _rid 値には、Azure Cognitive Search キーでは無効な文字が含まれています。Also, Azure Cosmos DB _rid values contain characters that are invalid in Azure Cognitive Search keys. そのため、_rid 値は Base64 でエンコードされます。For this reason, the _rid values are Base64 encoded.

MongoDB コレクションの場合、_id プロパティ名は、Azure Cognitive Search によって doc_id に自動的に変更されます。For MongoDB collections, Azure Cognitive Search automatically renames the _id property to doc_id.

JSON データ型と Azure Cognitive Search データ型間のマッピングMapping between JSON Data Types and Azure Cognitive Search Data Types

JSON データ型JSON data type 互換性のあるターゲット インデックス フィールドの型Compatible target index field types
BoolBool Edm.Boolean、Edm.StringEdm.Boolean, Edm.String
整数などの数値Numbers that look like integers Edm.Int32、Edm.Int64、Edm.StringEdm.Int32, Edm.Int64, Edm.String
浮動小数点などの数値Numbers that look like floating-points Edm.Double、Edm.StringEdm.Double, Edm.String
stringString Edm.StringEdm.String
プリミティブ型の配列。例: ["a"、"b"、"c"]Arrays of primitive types, for example ["a", "b", "c"] Collection(Edm.String)Collection(Edm.String)
日付などの文字列Strings that look like dates Edm.DateTimeOffset、Edm.StringEdm.DateTimeOffset, Edm.String
GeoJSON オブジェクト。例: { "type": "Point", "coordinates": [long, lat] }GeoJSON objects, for example { "type": "Point", "coordinates": [long, lat] } Edm.GeographyPointEdm.GeographyPoint
その他の JSON オブジェクトOther JSON objects 該当なしN/A

4 - インデクサーを構成して実行する4 - Configure and run the indexer

インデックスとデータ ソースを作成したら、インデクサーを作成できます。Once the index and data source have been created, you're ready to create the indexer:

POST https://[service name].search.windows.net/indexers?api-version=2019-05-06
Content-Type: application/json
api-key: [admin key]

{
  "name" : "mycosmosdbindexer",
  "dataSourceName" : "mycosmosdbdatasource",
  "targetIndexName" : "mysearchindex",
  "schedule" : { "interval" : "PT2H" }
}

このインデクサーは 2 時間ごとに実行されます (スケジュールの間隔が "PT2H" に設定されています)。This indexer runs every two hours (schedule interval is set to "PT2H"). インデクサーを 30 分ごとに実行するには、間隔を "PT30M" に設定します。To run an indexer every 30 minutes, set the interval to "PT30M". サポートされている最短の間隔は 5 分です。The shortest supported interval is 5 minutes. スケジュールは省略可能です。省略した場合、インデクサーは作成時に一度だけ実行されます。The schedule is optional - if omitted, an indexer runs only once when it's created. ただし、いつでもオンデマンドでインデクサーを実行できます。However, you can run an indexer on-demand at any time.

インデクサー作成 API の詳細については、「 インデクサーの作成」をご覧ください。For more details on the Create Indexer API, check out Create Indexer.

インデクサーのスケジュールの定義の詳細については、Azure Cognitive Search のインデクサーのスケジュールを設定する方法に関する記事を参照してください。For more information about defining indexer schedules, see How to schedule indexers for Azure Cognitive Search.

.NET の使用Use .NET

一般提供されている .NET SDK では、一般提供されている REST API による完全なパリティを保持しています。The generally available .NET SDK has full parity with the generally available REST API. 前の REST API セクションを確認し、概念、ワークフロー、要件を理解することをお勧めします。We recommend that you review the previous REST API section to learn concepts, workflow, and requirements. その後は、次の .NET API リファレンス ドキュメントを参照して、マネージド コードで JSON インデクサーを実装できます。You can then refer to following .NET API reference documentation to implement a JSON indexer in managed code.

変更されたドキュメントのインデックス作成Indexing changed documents

データ変更の検出ポリシーの目的は、変更されたデータ項目を効率的に識別することです。The purpose of a data change detection policy is to efficiently identify changed data items. 現在、唯一サポートされているポリシーは、次に示すように、Azure Cosmos DB によって指定される _ts (タイムスタンプ) プロパティを使用した High Water Mark ポリシーです。Currently, the only supported policy is the High Water Mark policy using the _ts (timestamp) property provided by Azure Cosmos DB, which is specified as follows:

{
    "@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
    "highWaterMarkColumnName" : "_ts"
}

インデクサーの優れたパフォーマンスを確保するのには、このポリシーを使用することが推奨されます。Using this policy is highly recommended to ensure good indexer performance.

カスタム クエリを使用している場合、_ts プロパティはクエリによって投影されていることを確認します。If you are using a custom query, make sure that the _ts property is projected by the query.

増分の進行状況とカスタム クエリIncremental progress and custom queries

インデックスの作成中に増分の進行状況を利用すると、一時的な障害や実行の制限時間によってインデクサーの実行が中断された場合、次の実行時に、最初からコレクション全体のインデックスを再作成するのではなく、中断したところからインデックスを作成することができます。Incremental progress during indexing ensures that if indexer execution is interrupted by transient failures or execution time limit, the indexer can pick up where it left off next time it runs, instead of having to reindex the entire collection from scratch. 大規模なコレクションのインデックスを作成する場合、この機能は特に重要です。This is especially important when indexing large collections.

カスタム クエリを使用するときに増分の進行状況を有効にするには、クエリを使用して _ts 列で結果を並べ替えておきます。To enable incremental progress when using a custom query, ensure that your query orders the results by the _ts column. こうすることで Azure Cognitive Search が使用する定期的なチェックポイントが作成され、エラーが発生した場合に増分の進行状況を利用できます。This enables periodic check-pointing that Azure Cognitive Search uses to provide incremental progress in the presence of failures.

ただし状況によっては、クエリに ORDER BY [collection alias]._ts 句が含まれる場合でも、クエリ結果が _ts で並べ替えられることを Azure Cognitive Search で推論されない可能性があります。In some cases, even if your query contains an ORDER BY [collection alias]._ts clause, Azure Cognitive Search may not infer that the query is ordered by the _ts. assumeOrderByHighWaterMarkColumn 構成プロパティを使用して結果が並べ替えられるように Azure Cognitive Search に指示することもできます。You can tell Azure Cognitive Search that results are ordered by using the assumeOrderByHighWaterMarkColumn configuration property. このヒントを指定するには、次のようにインデクサーを作成または更新します。To specify this hint, create or update your indexer as follows:

{
 ... other indexer definition properties
 "parameters" : {
        "configuration" : { "assumeOrderByHighWaterMarkColumn" : true } }
} 

削除されたドキュメントのインデックス作成Indexing deleted documents

コレクションから行が削除されると、通常、検索インデックスからも同様に行を削除する必要があります。When rows are deleted from the collection, you normally want to delete those rows from the search index as well. データ削除の検出ポリシーの目的は、削除されたデータ項目を効率的に識別することです。The purpose of a data deletion detection policy is to efficiently identify deleted data items. 現在、唯一サポートされているポリシーは、Soft Delete ポリシー (削除されると何らかのフラグでマークされる) のみです。このポリシーは、次のように指定します。Currently, the only supported policy is the Soft Delete policy (deletion is marked with a flag of some sort), which is specified as follows:

{
    "@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
    "softDeleteColumnName" : "the property that specifies whether a document was deleted",
    "softDeleteMarkerValue" : "the value that identifies a document as deleted"
}

カスタム クエリを使用している場合、softDeleteColumnName から参照されているプロパティはクエリによって投影されていることを確認します。If you are using a custom query, make sure that the property referenced by softDeleteColumnName is projected by the query.

次の例では、ソフト削除ポリシーとともにデータ ソースを作成します。The following example creates a data source with a soft-deletion policy:

POST https://[service name].search.windows.net/datasources?api-version=2019-05-06
Content-Type: application/json
api-key: [Search service admin key]

{
    "name": "mycosmosdbdatasource",
    "type": "cosmosdb",
    "credentials": {
        "connectionString": "AccountEndpoint=https://myCosmosDbEndpoint.documents.azure.com;AccountKey=myCosmosDbAuthKey;Database=myCosmosDbDatabaseId"
    },
    "container": { "name": "myCosmosDbCollectionId" },
    "dataChangeDetectionPolicy": {
        "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName": "_ts"
    },
    "dataDeletionDetectionPolicy": {
        "@odata.type": "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
        "softDeleteColumnName": "isDeleted",
        "softDeleteMarkerValue": "true"
    }
}

次のステップNext steps

お疲れさまでした。Congratulations! インデクサーを使用して、Azure Cosmos DB を Azure Cognitive Search と統合する方法についての説明は以上で終了です。You have learned how to integrate Azure Cosmos DB with Azure Cognitive Search using an indexer.