Azure Blob Storage 内ドキュメントのインデックスを Azure Search で作成するIndexing Documents in Azure Blob Storage with Azure Search

この記事では、Azure Search を使用して、Azure Blob Storage に格納されているドキュメント (PDF や Microsoft Office ドキュメント、その他のよく使用されている形式など) のインデックスを作成する方法を説明します。This article shows how to use Azure Search to index documents (such as PDFs, Microsoft Office documents, and several other common formats) stored in Azure Blob storage. まず、BLOB インデクサーの設定と構成の基礎を説明します。First, it explains the basics of setting up and configuring a blob indexer. 次に、発生する可能性のある動作とシナリオについて詳しく説明します。Then, it offers a deeper exploration of behaviors and scenarios you are likely to encounter.

サポートされるドキュメントの形式Supported document formats

BLOB インデクサーは、次の形式のドキュメントからテキストを抽出できます。The blob indexer can extract text from the following document formats:

BLOB インデックスの設定Setting up blob indexing

Azure Blob Storage インデクサーを設定するには、以下を使用します。You can set up an Azure Blob Storage indexer using:

注意

フィールド マッピングなど、機能によってはまだポータルで使用できないものがあります。こうした機能についてはプログラムで使用する必要があります。Some features (for example, field mappings) are not yet available in the portal, and have to be used programmatically.

ここでは、REST API を使用したフローについて説明します。Here, we demonstrate the flow using the REST API.

手順 1:データ ソースを作成するStep 1: Create a data source

データ ソースでは、インデックスを作成するデータ、データにアクセスするために必要な資格情報、およびデータの変更 (新しい行、変更された行、削除された行) を効率よく識別するためのポリシーを指定します。A data source specifies which data to index, credentials needed to access the data, and policies to efficiently identify changes in the data (new, modified, or deleted rows). データ ソースは、同じ Search サービス内の複数のインデクサーで使用できます。A data source can be used by multiple indexers in the same search service.

BLOB インデックス作成の場合は、次の必須プロパティがデータ ソースに必要です。For blob indexing, the data source must have the following required properties:

  • name は、Search サービス内のデータ ソースの一意の名前です。name is the unique name of the data source within your search service.
  • typeazureblob である必要があります。type must be azureblob.
  • credentials は、ストレージ アカウントの接続文字列を credentials.connectionString パラメーターとして提供します。credentials provides the storage account connection string as the credentials.connectionString parameter. 詳しくは、後述の「資格情報を指定する方法」をご覧ください。See How to specify credentials below for details.
  • container は、ストレージ アカウントにあるコンテナーを指定します。container specifies a container in your storage account. 既定では、コンテナー内のすべての BLOB を取得できます。By default, all blobs within the container are retrievable. 特定の仮想ディレクトリにある BLOB についてのみインデックスを作成する場合は、オプションの query パラメーターを使用してそのディレクトリを指定できます。If you only want to index blobs in a particular virtual directory, you can specify that directory using the optional query parameter.

データ ソースを作成する方法を次に示します。To create a data source:

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

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { "connectionString" : "DefaultEndpointsProtocol=https;AccountName=<account name>;AccountKey=<account key>;" },
    "container" : { "name" : "my-container", "query" : "<optional-virtual-directory-name>" }
}   

データ ソース作成 API の詳細については、「 データ ソースの作成」をご覧ください。For more on the Create Datasource API, see Create Datasource.

資格情報を指定する方法How to specify credentials

次のいずれかの方法で BLOB コンテナーに対して資格情報を指定できます。You can provide the credentials for the blob container in one of these ways:

  • フル アクセス ストレージ アカウントの接続文字列: DefaultEndpointsProtocol=https;AccountName=<your storage account>;AccountKey=<your account key> この接続文字列は、ストレージ アカウント ブレードに移動し、[設定] > [キー] と選択する (クラシック ストレージ アカウントの場合) か、[設定] > [アクセス キー] と選択する (Azure Resource Manager ストレージ アカウントの場合) ことで Azure portal から取得できます。Full access storage account connection string: DefaultEndpointsProtocol=https;AccountName=<your storage account>;AccountKey=<your account key> You can get the connection string from the Azure portal by navigating to the storage account blade > Settings > Keys (for Classic storage accounts) or Settings > Access keys (for Azure Resource Manager storage accounts).
  • ストレージ アカウントの Shared Access Signature (SAS) の接続文字列:BlobEndpoint=https://<your account>.blob.core.windows.net/;SharedAccessSignature=?sv=2016-05-31&sig=<the signature>&spr=https&se=<the validity end time>&srt=co&ss=b&sp=rlSAS にはコンテナー上およびオブジェクト (この場合は BLOB) にリストおよび読み取りアクセス許可が必要です。Storage account shared access signature (SAS) connection string: BlobEndpoint=https://<your account>.blob.core.windows.net/;SharedAccessSignature=?sv=2016-05-31&sig=<the signature>&spr=https&se=<the validity end time>&srt=co&ss=b&sp=rl The SAS should have the list and read permissions on containers and objects (blobs in this case).
  • コンテナーの Shared Access Signature:ContainerSharedAccessUri=https://<your storage account>.blob.core.windows.net/<container name>?sv=2016-05-31&sr=c&sig=<the signature>&se=<the validity end time>&sp=rlSAS にはコンテナー上にリストおよび読み取りアクセス許可が必要です。Container shared access signature: ContainerSharedAccessUri=https://<your storage account>.blob.core.windows.net/<container name>?sv=2016-05-31&sr=c&sig=<the signature>&se=<the validity end time>&sp=rl The SAS should have the list and read permissions on the container.

Shared Access Signature について詳しくは、「Shared Access Signature の使用」をご覧ください。For more info on storage shared access signatures, see Using Shared Access Signatures.

注意

SAS の資格情報を使用する場合は、その有効期限が切れないように、データ ソースの資格情報を更新された署名で定期的に更新する必要があります。If you use SAS credentials, you will need to update the data source credentials periodically with renewed signatures to prevent their expiration. SAS の資格情報の有効期限が切れると、インデクサーは「Credentials provided in the connection string are invalid or have expired.」のようなエラー メッセージで失敗します。If SAS credentials expire, the indexer will fail with an error message similar to Credentials provided in the connection string are invalid or have expired..

手順 2:インデックスを作成するStep 2: Create an index

インデックスでは、検索に使用する、ドキュメント内のフィールド、属性、およびその他の構成要素を指定します。The index specifies the fields in a document, attributes, and other constructs that shape the search experience.

ここでは、BLOB から抽出されたテキストを格納するために、検索可能な content フィールドを含むインデックスを作成する方法を示します。Here's how to create an index with a searchable content field to store the text extracted from blobs:

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

{
      "name" : "my-target-index",
      "fields": [
        { "name": "id", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "content", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false }
      ]
}

インデックスの作成の詳細については、インデックスの作成に関する記事をご覧ください。For more on creating indexes, see Create Index

手順 3:インデクサーの作成Step 3: Create an indexer

インデクサーはデータ ソースをターゲットの検索インデックスに接続し、データ更新を自動化するスケジュールを提供します。An indexer connects a data source with a target search index, and provides a schedule to automate the data refresh.

インデックスとデータ ソースを作成したら、インデクサーを作成できます。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" : "blob-indexer",
  "dataSourceName" : "blob-datasource",
  "targetIndexName" : "my-target-index",
  "schedule" : { "interval" : "PT2H" }
}

このインデクサーは 2 時間ごとに実行されます (スケジュールの間隔が "PT2H" に設定されています)。This indexer will run 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 Search のインデクサーのスケジュールを設定する方法」を参照してください。For more information about defining indexer schedules see How to schedule indexers for Azure Search.

Azure Search で BLOB のインデックスを作成する方法How Azure Search indexes blobs

インデクサー構成に応じて、BLOB インデクサーでは、ストレージ メタデータのみ (メタデータのみに注意すればよく、BLOB のコンテンツにインデックスを作成する必要がないときに便利です)、ストレージとコンテンツ メタデータ、またはメタデータとテキスト コンテンツの両方にインデックスを作成することができます。Depending on the indexer configuration, the blob indexer can index storage metadata only (useful when you only care about the metadata and don't need to index the content of blobs), storage and content metadata, or both metadata and textual content. インデクサーは、既定では、メタデータとコンテンツの両方を抽出します。By default, the indexer extracts both metadata and content.

注意

既定では、JSON や CSV などの構造化コンテンツを持つ BLOB には、1 つのテキスト チャンクとしてインデックスが作成されます。By default, blobs with structured content such as JSON or CSV are indexed as a single chunk of text. 構造化された方法で JSON および CSV の BLOB のインデックスを作成する場合は、JSON BLOB のインデックス作成に関するページCSV BLOB のインデックス作成に関するページで詳細を確認してください。If you want to index JSON and CSV blobs in a structured way, see Indexing JSON blobs and Indexing CSV blobs for more information.

複合ドキュメントや埋め込みドキュメント (ファイルが添付された Outlook 電子メールを埋め込んだ Word 文書、ZIP アーカイブなど) も、1 つのドキュメントとしてインデックスが作成されます。A compound or embedded document (such as a ZIP archive or a Word document with embedded Outlook email containing attachments) is also indexed as a single document.

  • ドキュメントのテキスト コンテンツが、content という名前の文字列フィールドに抽出されます。The textual content of the document is extracted into a string field named content.

注意

どれだけのテキストが抽出されるかは、価格レベルに応じて Azure Search によって制限されます。Free レベルの場合は 32,000 文字、Basic レベルの場合は 64,000 文字、Standard レベル、Standard S2 レベル、および Standard S3 レベルの場合は 400 万文字です。Azure Search limits how much text it extracts depending on the pricing tier: 32,000 characters for Free tier, 64,000 for Basic, and 4 million for Standard, Standard S2 and Standard S3 tiers. 切り捨てられたドキュメントについては、インデクサーの状態の応答に警告が含められます。A warning is included in the indexer status response for truncated documents.

  • ユーザー指定のメタデータのプロパティが BLOB に存在する場合、それらのプロパティは、そのまま抽出されます。User-specified metadata properties present on the blob, if any, are extracted verbatim.

  • 標準的な BLOB のメタデータのプロパティは、次のフィールドに抽出されます。Standard blob metadata properties are extracted into the following fields:

    • metadata_storage_name (Edm.String) - BLOB のファイル名。metadata_storage_name (Edm.String) - the file name of the blob. たとえば、/my-container/my-folder/subfolder/resume.pdf という BLOB がある場合、このフィールドの値は resume.pdf になります。For example, if you have a blob /my-container/my-folder/subfolder/resume.pdf, the value of this field is resume.pdf.
    • metadata_storage_path (Edm.String) - ストレージ アカウントを含む、BLOB の完全な URI。metadata_storage_path (Edm.String) - the full URI of the blob, including the storage account. たとえば、 https://myaccount.blob.core.windows.net/my-container/my-folder/subfolder/resume.pdfFor example, https://myaccount.blob.core.windows.net/my-container/my-folder/subfolder/resume.pdf
    • metadata_storage_content_type (Edm.String) - BLOB をアップロードするためのコードで指定したコンテンツ タイプ。metadata_storage_content_type (Edm.String) - content type as specified by the code you used to upload the blob. たとえば、「 application/octet-stream」のように入力します。For example, application/octet-stream.
    • metadata_storage_last_modified (Edm.DateTimeOffset) - 前回変更時の BLOB のタイムスタンプ。metadata_storage_last_modified (Edm.DateTimeOffset) - last modified timestamp for the blob. インデックスの初回作成後に最初から作成し直さなくても済むよう、変更された BLOB を Azure Search が特定するために、このタイムスタンプが使用されます。Azure Search uses this timestamp to identify changed blobs, to avoid reindexing everything after the initial indexing.
    • metadata_storage_size (Edm.Int64) - BLOB のサイズ (バイト単位)。metadata_storage_size (Edm.Int64) - blob size in bytes.
    • metadata_storage_content_md5 (Edm.String) - BLOB コンテンツの MD5 ハッシュ (利用可能な場合)。metadata_storage_content_md5 (Edm.String) - MD5 hash of the blob content, if available.
    • metadata_storage_sas_token (Edm.String) - BLOB に対してアクセスするために、カスタム スキルで使用できる一時的な SAS トークン。metadata_storage_sas_token (Edm.String) - A temporary SAS token that can be used by custom skills to get access to the blob. このトークンは、有効期限が切れる可能性があるため、後で使用するために保存しないでください。This token should not be stored for later use as it might expire.
  • 各ドキュメント形式に固有のメタデータのプロパティは、こちらに記載したフィールドに抽出されます。Metadata properties specific to each document format are extracted into the fields listed here.

検索インデックスに対し、ここに挙げたすべてのプロパティのフィールドを定義する必要はありません。実際のアプリケーションで必要となるプロパティだけを取り込んでください。You don't need to define fields for all of the above properties in your search index - just capture the properties you need for your application.

注意

既存のインデックス内のフィールド名が、ドキュメントの抽出過程で生成されたフィールド名と異なることは少なくありません。Often, the field names in your existing index will be different from the field names generated during document extraction. Azure Search によって出力されたプロパティ名は、フィールドのマッピングを使用して、検索インデックス内のフィールド名に対応付けることができます。You can use field mappings to map the property names provided by Azure Search to the field names in your search index. フィールドのマッピングの例を次に示します。You will see an example of field mappings use below.

ドキュメント キーとフィールド マッピングの定義Defining document keys and field mappings

Azure Search では、ドキュメントがそのキーによって一意に識別されます。In Azure Search, the document key uniquely identifies a document. それぞれの検索インデックスに、Edm.String 型のキー フィールドが 1 つだけ存在している必要があります。Every search index must have exactly one key field of type Edm.String. キー フィールドは、インデックスに追加するドキュメントごとに必要となります (唯一の必須フィールド)。The key field is required for each document that is being added to the index (it is actually the only required field).

抽出されたフィールドとインデックスのキー フィールドとのマッピングは、慎重に検討する必要があります。You should carefully consider which extracted field should map to the key field for your index. その例を次に示します。The candidates are:

  • metadata_storage_name - 名前をキーにできればそれに越したことはありませんが、1) 同じ名前の BLOB が別のフォルダーに存在し、名前が重複する可能性があること、2) ドキュメント キーに無効な文字 (ダッシュなど) が名前に含まれている可能性があることに注意する必要があります。metadata_storage_name - this might be a convenient candidate, but note that 1) the names might not be unique, as you may have blobs with the same name in different folders, and 2) the name may contain characters that are invalid in document keys, such as dashes. 無効な文字は、base64Encode フィールド マッピング関数を使用して処理できます。その場合、API 呼び出し (Lookup など) にドキュメント キーを渡すとき、必ずエンコードしてくださいYou can deal with invalid characters by using the base64Encode field mapping function - if you do this, remember to encode document keys when passing them in API calls such as Lookup. (たとえば、.NET であれば UrlTokenEncode メソッドを利用できます)。(For example, in .NET you can use the UrlTokenEncode method for that purpose).
  • metadata_storage_path - 完全パスであれば一意性は保証されます。ただし、パスに使われる / 文字は、ドキュメント キーでは無効です。metadata_storage_path - using the full path ensures uniqueness, but the path definitely contains / characters that are invalid in a document key. この場合も、base64Encode 関数を使用してキーをエンコーディングすることができます。As above, you have the option of encoding the keys using the base64Encode function.
  • いずれの選択肢も利用できない場合は、独自のメタデータ プロパティを BLOB に追加できます。If none of the options above work for you, you can add a custom metadata property to the blobs. ただし、この方法を選んだ場合、BLOB のアップロード プロセスで、該当するメタデータのプロパティをすべての BLOB に追加する必要があります。This option does, however, require your blob upload process to add that metadata property to all blobs. キーは必須のプロパティであるため、そのプロパティを持たない BLOB については、インデックスが一切作成されません。Since the key is a required property, all blobs that don't have that property will fail to be indexed.

重要

インデックス内のキー フィールドに対して明示的なマッピングが存在しない場合、Azure Search は自動的に metadata_storage_path をキーおよび base-64 エンコード キー値として使用します (上記の 2 つ目の選択肢)。If there is no explicit mapping for the key field in the index, Azure Search automatically uses metadata_storage_path as the key and base-64 encodes key values (the second option above).

この例では、metadata_storage_name フィールドをドキュメント キーにしましょう。For this example, let's pick the metadata_storage_name field as the document key. また、既存のインデックスには、key という名前のキー フィールドと、ドキュメントのサイズを格納するための fileSize フィールドが存在するものとします。Let's also assume your index has a key field named key and a field fileSize for storing the document size. それらを適切に対応付けるために、インデクサーを作成または更新するときに、次のフィールド マッピングを指定します。To wire things up as desired, specify the following field mappings when creating or updating your indexer:

"fieldMappings" : [
  { "sourceFieldName" : "metadata_storage_name", "targetFieldName" : "key", "mappingFunction" : { "name" : "base64Encode" } },
  { "sourceFieldName" : "metadata_storage_size", "targetFieldName" : "fileSize" }
]

以下に示したのは、それらを反映したコードです。既存のインデクサーに対してフィールドのマッピングを追加し、キーの base-64 エンコーディングを有効にしています。To bring this all together, here's how you can add field mappings and enable base-64 encoding of keys for an existing indexer:

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

{
  "dataSourceName" : " blob-datasource ",
  "targetIndexName" : "my-target-index",
  "schedule" : { "interval" : "PT2H" },
  "fieldMappings" : [
    { "sourceFieldName" : "metadata_storage_name", "targetFieldName" : "key", "mappingFunction" : { "name" : "base64Encode" } },
    { "sourceFieldName" : "metadata_storage_size", "targetFieldName" : "fileSize" }
  ]
}

注意

フィールド マッピングの詳細については、こちらの記事を参照してください。To learn more about field mappings, see this article.

インデックスが作成される BLOB の制御Controlling which blobs are indexed

インデックスが作成される BLOB とスキップされる BLOB を制御できます。You can control which blobs are indexed, and which are skipped.

特定のファイル拡張子を持つ BLOB のみのインデックスを作成するIndex only the blobs with specific file extensions

indexedFileNameExtensions インデクサー構成パラメーターを使用すると、指定したファイル名拡張子を持つ BLOB のインデックスだけを作成できます。You can index only the blobs with the file name extensions you specify by using the indexedFileNameExtensions indexer configuration parameter. 値は、(先頭にピリオドが付いた) ファイル拡張子のコンマ区切りの一覧を含む文字列です。The value is a string containing a comma-separated list of file extensions (with a leading dot). たとえば、.PDF や .DOCX の BLOB のみのインデックスを作成する場合は、この操作を行います。For example, to index only the .PDF and .DOCX blobs, do this:

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

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "indexedFileNameExtensions" : ".pdf,.docx" } }
}

特定のファイル拡張子を持つ BLOB を除外するExclude blobs with specific file extensions

excludedFileNameExtensions 構成パラメーターを使用すると、特定のファイル名拡張子を持つ BLOB をインデックス作成から除外できます。You can exclude blobs with specific file name extensions from indexing by using the excludedFileNameExtensions configuration parameter. 値は、(先頭にピリオドが付いた) ファイル拡張子のコンマ区切りの一覧を含む文字列です。The value is a string containing a comma-separated list of file extensions (with a leading dot). たとえば、.PNG と .JPEG の拡張子を持つ BLOB を除くすべての BLOB のインデックスを作成する場合は、この操作を行います。For example, to index all blobs except those with the .PNG and .JPEG extensions, do this:

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

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "excludedFileNameExtensions" : ".png,.jpeg" } }
}

indexedFileNameExtensionsexcludedFileNameExtensions の両方のパラメーターがある場合、Azure Search では最初に indexedFileNameExtensions を調べ、次に excludedFileNameExtensions を調べます。If both indexedFileNameExtensions and excludedFileNameExtensions parameters are present, Azure Search first looks at indexedFileNameExtensions, then at excludedFileNameExtensions. つまり、同じファイル拡張子が両方の一覧に存在する場合、インデックス作成から除外されます。This means that if the same file extension is present in both lists, it will be excluded from indexing.

インデックスが作成される BLOB の部分の制御Controlling which parts of the blob are indexed

BLOB のどの部分にインデックスを作成するかは、dataToExtract 構成パラメーターを使用して制御できます。You can control which parts of the blobs are indexed using the dataToExtract configuration parameter. 次の値を使用できます。It can take the following values:

たとえば、ストレージ メタデータのみにインデックスを作成するには、次のように使用します。For example, to index only the storage metadata, use:

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

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "dataToExtract" : "storageMetadata" } }
}

BLOB のメタデータを使用した BLOB インデックスの作成方法の制御Using blob metadata to control how blobs are indexed

上記の構成パラメーターは、すべての BLOB に適用されます。The configuration parameters described above apply to all blobs. ときには、"個々の BLOB" のインデックスの作成方法を制御することが必要になる場合があります。Sometimes, you may want to control how individual blobs are indexed. これを行うには、次の BLOB メタデータのプロパティと値を追加します。You can do this by adding the following blob metadata properties and values:

プロパティ名Property name プロパティ値Property value 説明Explanation
AzureSearch_SkipAzureSearch_Skip "true""true" BLOB を完全にスキップするように BLOB インデクサーに指示します。Instructs the blob indexer to completely skip the blob. メタデータとコンテンツのどちらの抽出も行われません。Neither metadata nor content extraction is attempted. 特定の BLOB で何度もエラーが発生し、インデックス作成プロセスが中断されるときに利用できます。This is useful when a particular blob fails repeatedly and interrupts the indexing process.
AzureSearch_SkipContentAzureSearch_SkipContent "true""true" これは、に説明した、特定の BLOB を対象とする "dataToExtract" : "allMetadata" 設定と同じです。This is equivalent of "dataToExtract" : "allMetadata" setting described above scoped to a particular blob.

エラーへの対処Dealing with errors

既定では、BLOB インデクサーは、サポートされていないコンテンツの種類 (画像など) が含まれる BLOB を検出するとすぐに停止されます。By default, the blob indexer stops as soon as it encounters a blob with an unsupported content type (for example, an image). もちろん、excludedFileNameExtensions パラメーターを使用して特定のコンテンツの種類をスキップすることもできますが、You can of course use the excludedFileNameExtensions parameter to skip certain content types. 存在する可能性のあるすべてのコンテンツの種類が事前にわからないまま BLOB のインデックスを作成する必要がある場合もあります。However, you may need to index blobs without knowing all the possible content types in advance. サポートされていないコンテンツの種類が検出されたときにインデックス作成を続行するには、failOnUnsupportedContentType 構成パラメーターを false に設定します。To continue indexing when an unsupported content type is encountered, set the failOnUnsupportedContentType configuration parameter to false:

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

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "failOnUnsupportedContentType" : false } }
}

一部の BLOB では、Azure Search はコンテンツの種類を判別できないか、他の種類ではサポートされているコンテンツの種類のドキュメントを処理できない場合があります。For some blobs, Azure Search is unable to determine the content type, or unable to process a document of otherwise supported content type. この障害モードを無視するには、failOnUnprocessableDocument 構成パラメーターを false に設定します。To ignore this failure mode, set the failOnUnprocessableDocument configuration parameter to false:

  "parameters" : { "configuration" : { "failOnUnprocessableDocument" : false } }

Azure Search では、インデックスを付ける BLOB のサイズが制限されます。Azure Search limits the size of blobs that are indexed. これらの制限は、「Azure Search サービスの制限」に記載されています。These limits are documented in Service Limits in Azure Search. サイズが大きい BLOB は、既定ではエラーとして扱われます。Oversized blobs are treated as errors by default. ただし、indexStorageMetadataOnlyForOversizedDocuments 構成パラメーターを true に設定した場合、サイズが大きい BLOB のストレージ メタデータには引き続きインデックスを付けることができます。However, you can still index storage metadata of oversized blobs if you set indexStorageMetadataOnlyForOversizedDocuments configuration parameter to true:

"parameters" : { "configuration" : { "indexStorageMetadataOnlyForOversizedDocuments" : true } }

BLOB の解析中またはインデックスへのドキュメントの追加中、処理のどこかの時点でエラーが発生した場合に、インデックス付けを続行することもできます。You can also continue indexing if errors happen at any point of processing, either while parsing blobs or while adding documents to an index. 特定数のエラーを無視するには、構成パラメーター maxFailedItemsmaxFailedItemsPerBatch を望ましい値に設定します。To ignore a specific number of errors, set the maxFailedItems and maxFailedItemsPerBatch configuration parameters to the desired values. 例:For example:

{
  ... other parts of indexer definition
  "parameters" : { "maxFailedItems" : 10, "maxFailedItemsPerBatch" : 10 }
}

インデックスの増分作成と削除の検出Incremental indexing and deletion detection

スケジュールに従って実行するように BLOB のインデクサーを設定すると、その BLOB の LastModified タイムスタンプから判断された変更済みの BLOB のみインデックスが再構築されます。When you set up a blob indexer to run on a schedule, it reindexes only the changed blobs, as determined by the blob's LastModified timestamp.

注意

変更検出ポリシーを独自に指定する必要はありません。インデックスの増分作成は自動的に有効になります。You don't have to specify a change detection policy – incremental indexing is enabled for you automatically.

ドキュメントの削除をサポートするには、"論理削除" 方式を使用してください。To support deleting documents, use a "soft delete" approach. BLOB を完全に削除すると、対応するドキュメントが Search インデックスから削除されません。If you delete the blobs outright, corresponding documents will not be removed from the search index. 代わりに、次の手順を実行します。Instead, use the following steps:

  1. 独自のメタデータ プロパティを BLOB に追加して、ドキュメントが論理的に削除されていることを Azure Search に示しますAdd a custom metadata property to the blob to indicate to Azure Search that it is logically deleted
  2. データ ソースで論理削除の検出ポリシーを構成しますConfigure a soft deletion detection policy on the data source
  3. インデクサーが BLOB を処理したら (インデクサーの状態 API によって示されます)、BLOB を物理的に削除できますOnce the indexer has processed the blob (as shown by the indexer status API), you can physically delete the blob

たとえば、次のポリシーでは、BLOB のメタデータ プロパティ IsDeleted の値が true のときに、その BLOB が削除されるものと見なされます。For example, the following policy considers a blob to be deleted if it has a metadata property IsDeleted with the value true:

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

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { "connectionString" : "<your storage connection string>" },
    "container" : { "name" : "my-container", "query" : "my-folder" },
    "dataDeletionDetectionPolicy" : {
        "@odata.type" :"#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",     
        "softDeleteColumnName" : "IsDeleted",
        "softDeleteMarkerValue" : "true"
    }
}   

大規模なデータセットのインデックス作成Indexing large datasets

BLOB のインデックス作成プロセスは、時間がかかる場合があります。Indexing blobs can be a time-consuming process. インデックスを作成する BLOB が数百万ある場合は、データをパーティション分割し、複数のインデクサーを使用してデータを並列で処理することで、インデックス作成を高速に処理できます。In cases where you have millions of blobs to index, you can speed up indexing by partitioning your data and using multiple indexers to process the data in parallel. 設定方法は次のとおりです。Here's how you can set this up:

  • 複数の BLOB コンテナーまたは仮想フォルダーにデータをパーティション分割します。Partition your data into multiple blob containers or virtual folders

  • コンテナーまたはフォルダーごとに 1 つずつ、Azure Search データ ソースを設定します。Set up several Azure Search data sources, one per container or folder. BLOB フォルダーをポイントするには、query パラメーターを使用します。To point to a blob folder, use the query parameter:

    {
        "name" : "blob-datasource",
        "type" : "azureblob",
        "credentials" : { "connectionString" : "<your storage connection string>" },
        "container" : { "name" : "my-container", "query" : "my-folder" }
    }
    
  • データ ソースごとに対応するインデクサーを作成します。Create a corresponding indexer for each data source. すべてのインデクサーから、同じターゲット検索インデックスをポイントできます。All the indexers can point to the same target search index.

  • サービス内の 1 つの検索単位は、特定の時点で 1 つのインデクサーを実行できます。One search unit in your service can run one indexer at any given time. 上記のように、複数のインデクサーの作成は、これらを実際に並行して実行する場合のみ有用です。Creating multiple indexers as described above is only useful if they actually run in parallel. 複数のインデクサーを並行して実行するには、適切な数のパーティションとレプリカを作成して、検索サービスをスケールアウトします。To run multiple indexers in parallel, scale out your search service by creating an appropriate number of partitions and replicas. たとえば、検索サービスに 6 つの検索単位がある場合 (たとえば、2 つのパーティション x 3 つのレプリカ)、6 つのインデクサーを同時に実行でき、インデックス作成のスループットが 6 倍になります。For example, if your search service has 6 search units (for example, 2 partitions x 3 replicas), then 6 indexers can run simultaneously, resulting in a six-fold increase in the indexing throughput. スケーリングと容量計画について詳しくは、「Azure Search でクエリとインデックス作成のワークロードに応じてリソース レベルをスケールする」をご覧ください。To learn more about scaling and capacity planning, see Scale resource levels for query and indexing workloads in Azure Search.

インデックスの複数のソースからドキュメントを「アセンブル」できます。You may want to "assemble" documents from multiple sources in your index. たとえば、Cosmos DB に格納された他のメタデータを使用して BLOB からテキストをマージすることもできます。For example, you may want to merge text from blobs with other metadata stored in Cosmos DB. プッシュ インデックス作成 API を各種インデクサーとともに使用して、複数のパーツから検索ドキュメントを構築することもできます。You can even use the push indexing API together with various indexers to build up search documents from multiple parts.

これが機能するには、すべてのインデクサーと他のコンポーネントがドキュメント キーに同意する必要があります。For this to work, all indexers and other components need to agree on the document key. このトピックの詳細については、複数の Azure データ ソースのインデックスを作成する方法に関するページを参照してください。For additional details on this topic, refer to Index multiple Azure data sources. このソリューションのチュートリアルについて詳しくは、外部資料「Combine documents with other data in Azure Search (ドキュメントを Azure Search の他のデータと組み合わせる)」をご覧ください。For a detailed walk-through, see this external article: Combine documents with other data in Azure Search.

プレーンテキストのインデックス作成Indexing plain text

すべての BLOB に同じエンコードのプレーンテキストが含まれている場合、テキスト解析モードを使用してインデックス作成のパフォーマンスを大幅に改善できます。If all your blobs contain plain text in the same encoding, you can significantly improve indexing performance by using text parsing mode. テキスト解析モードを使用するには、parsingMode 構成プロパティを text に設定します。To use text parsing mode, set the parsingMode configuration property to text:

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

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "parsingMode" : "text" } }
}

既定では、UTF-8 エンコードが想定されます。By default, the UTF-8 encoding is assumed. 別のエンコードを指定するには、encoding 構成プロパティを使用します。To specify a different encoding, use the encoding configuration property:

{
  ... other parts of indexer definition
  "parameters" : { "configuration" : { "parsingMode" : "text", "encoding" : "windows-1252" } }
}

コンテンツの種類ごとのメタデータのプロパティContent type-specific metadata properties

以下の表は、各ドキュメント形式に関して実行される処理と、Azure Search によって抽出されるメタデータのプロパティをまとめたものです。The following table summarizes processing done for each document format, and describes the metadata properties extracted by Azure Search.

ドキュメントの形式/コンテンツの種類Document format / content type コンテンツの種類ごとのメタデータのプロパティContent-type specific metadata properties 処理の詳細Processing details
HTML (text/html)HTML (text/html) metadata_content_encoding
metadata_content_type
metadata_language
metadata_description
metadata_keywords
metadata_title
HTML マークアップを削除し、テキストを抽出します。Strip HTML markup and extract text
PDF (application/pdf)PDF (application/pdf) metadata_content_type
metadata_language
metadata_author
metadata_title
テキストを抽出します。埋め込みドキュメントも対象となります (画像を除く)。Extract text, including embedded documents (excluding images)
DOCX (application/vnd.openxmlformats-officedocument.wordprocessingml.document)DOCX (application/vnd.openxmlformats-officedocument.wordprocessingml.document) metadata_content_type
metadata_author
metadata_character_count
metadata_creation_date
metadata_last_modified
metadata_page_count
metadata_word_count
テキストを抽出します。埋め込みドキュメントも対象となります。Extract text, including embedded documents
DOC (application/msword)DOC (application/msword) metadata_content_type
metadata_author
metadata_character_count
metadata_creation_date
metadata_last_modified
metadata_page_count
metadata_word_count
テキストを抽出します。埋め込みドキュメントも対象となります。Extract text, including embedded documents
DOCM (application/vnd.ms-word.document.macroenabled.12)DOCM (application/vnd.ms-word.document.macroenabled.12) metadata_content_type
metadata_author
metadata_character_count
metadata_creation_date
metadata_last_modified
metadata_page_count
metadata_word_count
テキストを抽出します。埋め込みドキュメントも対象となります。Extract text, including embedded documents
WORD XML (application/vnd.ms-word2006ml)WORD XML (application/vnd.ms-word2006ml) metadata_content_type
metadata_author
metadata_character_count
metadata_creation_date
metadata_last_modified
metadata_page_count
metadata_word_count
XML マークアップを削除し、テキストを抽出します。Strip XML markup and extract text
WORD 2003 XML (application/vnd.ms-wordml)WORD 2003 XML (application/vnd.ms-wordml) metadata_content_type
metadata_author
metadata_creation_date
XML マークアップを削除し、テキストを抽出します。Strip XML markup and extract text
XLSX (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet)XLSX (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
テキストを抽出します。埋め込みドキュメントも対象となります。Extract text, including embedded documents
XLS (application/vnd.ms-excel)XLS (application/vnd.ms-excel) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
テキストを抽出します。埋め込みドキュメントも対象となります。Extract text, including embedded documents
XLSM (application/vnd.ms-excel.sheet.macroenabled.12)XLSM (application/vnd.ms-excel.sheet.macroenabled.12) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
テキストを抽出します。埋め込みドキュメントも対象となります。Extract text, including embedded documents
PPTX (application/vnd.openxmlformats-officedocument.presentationml.presentation)PPTX (application/vnd.openxmlformats-officedocument.presentationml.presentation) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
metadata_slide_count
metadata_title
テキストを抽出します。埋め込みドキュメントも対象となります。Extract text, including embedded documents
PPT (application/vnd.ms-powerpoint)PPT (application/vnd.ms-powerpoint) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
metadata_slide_count
metadata_title
テキストを抽出します。埋め込みドキュメントも対象となります。Extract text, including embedded documents
PPTM (application/vnd.ms-powerpoint.presentation.macroenabled.12)PPTM (application/vnd.ms-powerpoint.presentation.macroenabled.12) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
metadata_slide_count
metadata_title
テキストを抽出します。埋め込みドキュメントも対象となります。Extract text, including embedded documents
MSG (application/vnd.ms-outlook)MSG (application/vnd.ms-outlook) metadata_content_type
metadata_message_from
metadata_message_from_email
metadata_message_to
metadata_message_to_email
metadata_message_cc
metadata_message_cc_email
metadata_message_bcc
metadata_message_bcc_email
metadata_creation_date
metadata_last_modified
metadata_subject
テキストを抽出します。添付ファイルも対象となります。Extract text, including attachments
ODT (application/vnd.oasis.opendocument.text)ODT (application/vnd.oasis.opendocument.text) metadata_content_type
metadata_author
metadata_character_count
metadata_creation_date
metadata_last_modified
metadata_page_count
metadata_word_count
テキストを抽出します。埋め込みドキュメントも対象となります。Extract text, including embedded documents
ODS (application/vnd.oasis.opendocument.spreadsheet)ODS (application/vnd.oasis.opendocument.spreadsheet) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
テキストを抽出します。埋め込みドキュメントも対象となります。Extract text, including embedded documents
ODP (application/vnd.oasis.opendocument.presentation)ODP (application/vnd.oasis.opendocument.presentation) metadata_content_type
metadata_author
metadata_creation_date
metadata_last_modified
title
テキストを抽出します。埋め込みドキュメントも対象となります。Extract text, including embedded documents
ZIP (application/zip)ZIP (application/zip) metadata_content_type アーカイブ内のすべてのドキュメントからテキストを抽出します。Extract text from all documents in the archive
GZ (application/gzip)GZ (application/gzip) metadata_content_type アーカイブ内のすべてのドキュメントからテキストを抽出します。Extract text from all documents in the archive
EPUB (application/epub+zip)EPUB (application/epub+zip) metadata_content_type
metadata_author
metadata_creation_date
metadata_title
metadata_description
metadata_language
metadata_keywords
metadata_identifier
metadata_publisher
アーカイブ内のすべてのドキュメントからテキストを抽出します。Extract text from all documents in the archive
XML (application/xml)XML (application/xml) metadata_content_type
metadata_content_encoding
XML マークアップを削除し、テキストを抽出します。Strip XML markup and extract text
JSON (application/json)JSON (application/json) metadata_content_type
metadata_content_encoding
テキストを抽出しますExtract text
注:JSON BLOB から複数のドキュメント フィールドを抽出する必要がある場合、詳細については、JSON BLOB のインデックス作成に関する記事をご覧くださいNOTE: If you need to extract multiple document fields from a JSON blob, see Indexing JSON blobs for details
EML (message/rfc822)EML (message/rfc822) metadata_content_type
metadata_message_from
metadata_message_to
metadata_message_cc
metadata_creation_date
metadata_subject
テキストを抽出します。添付ファイルも対象となります。Extract text, including attachments
RTF (アプリケーション/rtf)RTF (application/rtf) metadata_content_type
metadata_author
metadata_character_count
metadata_creation_date
metadata_page_count
metadata_word_count
テキストを抽出しますExtract text
プレーン テキスト (text/plain)Plain text (text/plain) metadata_content_type
metadata_content_encoding
テキストを抽出しますExtract text

Azure Search の品質向上にご協力くださいHelp us make Azure Search better

ご希望の機能や品質向上のアイデアがありましたら、UserVoice サイトまでお寄せください。If you have feature requests or ideas for improvements, let us know on our UserVoice site.