You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否不使用indexers在Azure Cognitive Search中为文件建立索引?

直接推送PDF/DOCX/HTML文件到Azure Cognitive Search(不使用Indexer)

完全可以不依赖Indexer,直接通过Push API完成这类文件的索引操作——但不能直接推送字节数组,因为Azure Cognitive Search的Push API仅接受结构化JSON数据,不会自动解析二进制文件内容。你需要先在本地或应用服务中完成文件内容的提取,再将文本与元数据组装成符合索引结构的JSON后提交。

具体操作步骤:

  1. 创建匹配的索引结构
    先在Azure Cognitive Search中创建包含必要字段的索引,示例字段配置:

    • id:必填唯一标识符(字符串类型)
    • fileName:文件名(字符串)
    • fileType:文件类型(字符串)
    • content:提取的文件文本内容(可搜索字符串类型)
    • 可选元数据字段:lastModified(日期类型)、fileSize(数值类型)等
  2. 提取文件文本内容
    根据文件类型选择对应工具库提取纯文本或结构化内容:

    • PDF:使用iTextSharp、PdfSharp或Azure Form Recognizer SDK(需提取结构化数据时)
    • DOCX:使用Open XML SDK或DocX库
    • HTML:使用HtmlAgilityPack提取纯文本,或保留结构化标签(按需选择)

    示例C#代码片段:

    // 提取PDF文本(iTextSharp)
    private string ExtractPdfText(string filePath)
    {
        using (var reader = new iTextSharp.text.pdf.PdfReader(filePath))
        {
            var textBuilder = new StringBuilder();
            for (int page = 1; page <= reader.NumberOfPages; page++)
            {
                textBuilder.Append(iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(reader, page));
            }
            return textBuilder.ToString();
        }
    }
    
    // 提取DOCX文本(Open XML SDK)
    private string ExtractDocxText(string filePath)
    {
        using (var doc = WordprocessingDocument.Open(filePath, false))
        {
            return doc.MainDocumentPart.Document.Body.InnerText;
        }
    }
    
    // 提取HTML纯文本(HtmlAgilityPack)
    private string ExtractHtmlText(string filePath)
    {
        var htmlDoc = new HtmlAgilityPack.HtmlDocument();
        htmlDoc.Load(filePath);
        return htmlDoc.DocumentNode.InnerText;
    }
    
  3. 组装并推送JSON数据
    将提取的文本与元数据组装成符合索引结构的对象,通过Azure Cognitive Search官方SDK(如Azure.Search.Documents)调用Push API提交:

    示例C#代码片段:

    // 初始化搜索客户端
    var searchClient = new SearchClient(
        new Uri("你的搜索服务URL"),
        "目标索引名称",
        new AzureKeyCredential("你的管理员API密钥")
    );
    
    // 组装待推送文档
    var targetFile = "path/to/your/file.pdf";
    var document = new
    {
        id = Guid.NewGuid().ToString(),
        fileName = Path.GetFileName(targetFile),
        fileType = Path.GetExtension(targetFile).TrimStart('.'),
        content = ExtractPdfText(targetFile),
        lastModified = File.GetLastWriteTime(targetFile)
    };
    
    // 批量上传文档(支持单次推送多个)
    var batch = IndexDocumentsBatch.Upload(new[] { document });
    var result = await searchClient.IndexDocumentsAsync(batch);
    
    // 处理推送结果
    if (result.Results.Any(r => r.Status != IndexDocumentsResultStatus.Succeeded))
    {
        // 针对失败文档做重试或日志记录
    }
    

注意事项:

  • 大文件建议分块处理,避免单个请求超出API限制
  • 若需提取PDF中的表格、表单等结构化数据,可先通过Azure Form Recognizer解析,再将结构化数据写入索引字段
  • 确保使用的API密钥拥有目标索引的写入权限(管理员密钥或自定义权限密钥)

内容的提问来源于stack exchange,提问作者TKharaishvili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:43:14