使用 delimitedText 分析模式为 CSV blob 和文件编制索引

适用于Blob 存储索引器文件索引器

在 Azure AI 搜索中,Azure Blob 存储和 Azure 文件存储的索引器支持 CSV 文件的 delimitedText 分析模式,该模式将 CSV 中的每一行视为单独的搜索文档。 例如,如果给定以下以逗号分隔的文本,delimitedText 分析模式就会在搜索索引中产生两个文档:

id, datePublished, tags
1, 2016-01-12, "azure-search,azure,cloud"
2, 2016-07-07, "cloud,mobile"

如果 CSV 文件内的字段包含分隔符,应将其用引号引起来。 如果字段包含引号,必须双引号 ("") 对其进行转义。

id, datePublished, tags
1, 2020-01-05, "tags,with,""quoted text"""

如果不使用 delimitedText 分析模式,CSV 文件的全部内容都会被视为一个搜索文档。

每次从一个 Blob 创建多个搜索文档时,请务必查看为 Blob 编制索引以生成多个搜索文档,以了解文档键分配的工作方式。 Blob 索引器能够查找或生成独一无二地定义每个新文档的值。 具体而言,它可以创建一个在 Blob 解析为较小部分时的暂时性 AzureSearch_DocumentKey,其中的值随后会在索引中用作搜索文档的键。

设置 CSV 索引

若要对 CSV blob 编制索引,请使用 delimitedText 分析模式根据创建索引器请求创建或更新索引器定义。

仅支持 UTF-8 编码。

{
  "name" : "my-csv-indexer",
  ... other indexer properties
  "parameters" : { "configuration" : { "parsingMode" : "delimitedText", "firstLineContainsHeaders" : true } }
}

firstLineContainsHeaders 指示每个 blob 的第一行(非空)包含标头。 如果 blob 未包含初始标头行,则应在索引器配置中指定标头:

"parameters" : { "configuration" : { "parsingMode" : "delimitedText", "delimitedTextHeaders" : "id,datePublished,tags" } } 

可以使用 delimitedTextDelimiter 配置设置来自定义分隔符字符。 例如:

"parameters" : { "configuration" : { "parsingMode" : "delimitedText", "delimitedTextDelimiter" : "|" } }

注意

在带分隔符的文本分析模式下,Azure AI 搜索假定所有 blob 都是 CSV。 如果同一数据源中混合有 CSV 和非 CSV blob,请考虑使用文件扩展名筛选器来控制每个索引器运行时导入的文件。

请求示例

将其放在一起,以下是完整的有效负载示例。

数据源:

POST https://[service name].search.azure.cn/datasources?api-version=2024-07-01
Content-Type: application/json
api-key: [admin key]
{
    "name" : "my-blob-datasource",
    "type" : "azureblob",
    "credentials" : { "connectionString" : "DefaultEndpointsProtocol=https;AccountName=<account name>;AccountKey=<account key>;" },
    "container" : { "name" : "my-container", "query" : "<optional, my-folder>" }
}   

索引器:

POST https://[service name].search.azure.cn/indexers?api-version=2024-07-01
Content-Type: application/json
api-key: [admin key]
{
  "name" : "my-csv-indexer",
  "dataSourceName" : "my-blob-datasource",
  "targetIndexName" : "my-target-index",
  "parameters" : { "configuration" : { "parsingMode" : "delimitedText", "delimitedTextHeaders" : "id,datePublished,tags" } }
}