python 以编程方式为Azure认知搜索编制非JSON文档索引

2vuwiymt  于 2023-09-29  发布在  Python
关注(0)|答案(1)|浏览(95)

我想以编程方式做Azure索引器所做的事情,将文档从数据源推送到Azure上的索引。理想情况下用Python编写。
这可以通过Azure索引器完成,但我想自己处理这个推送逻辑。
这些文档有各种格式,最常见的是docx, pdf, pptx
假设Azure索引已经存在,并且可以在此自定义索引器的范围内检索文档。
我想做一些类似this的事情,包括用非常定制的批量大小、频率和多线程策略推送文档。
到目前为止我只知道如何推送JSON格式的数据,这可以通过PythonAzureSDK调用来完成

def add_doc(docs):
    search_client = SearchClient(ENDPOINT, index_name, AzureKeyCredential(KEY))
    result = search_client.upload_documents(documents=docs)
    print("Upload of new document succeeded: {}".format(result[0].succeeded))

其中docs被定义为字典列表:

doc1 = {
  'field1': xxx,
  'field2': yyy,
  'field3': zzz
}
docs = [doc1, doc2, doc3, ...]

然而,在真实的应用中,我希望能够推送上述类型的整个文件,包括但不限于docx, pdf, pptx
我找不到对非JSON文件索引的官方支持。upload_documents()方法只适用于字典列表:

upload_documents(documents: List[dict], **kwargs: Any) -> List[IndexingResult]

以下是我正在考虑的一些可能性:
1.以某种方式将任意文件转换为JSON,通过一些Python库从其中提取文本。这种方法的鲁棒性是非常不确定的。文件的大小大于正常的可传输JSON也会导致拼接复杂性。
1.希望有一些API调用用于传输二进制格式的文件。解码可以在自定义索引器端完成,并将自定义技能集应用于此类文件。然后编码并推送到Azure索引。

uelo1irk

uelo1irk1#

根据所提供的信息,一种可能的解决方案是使用Azure Files indexer(预览)将docx、pdf和pptx等非JSON文件推送到Azure索引。此索引器可以从各种文档格式中提取文本,并使其在Azure Cognitive Search中可搜索。
以下是Azure文件索引器支持的一些相关文档格式:

  • CSV
  • Microsoft Office格式:DOCX/DOC/DOCM,XLSX/XLS/XLSM,PPTX/PPT/PPTM,MSG(Outlook电子邮件),
  • XML
  • PDF
  • 纯文本文件
  • ZIP

目前,该服务已公开预览,您可以使用python and request package通过REST API使用。
有关设置和配置的详细信息,您可以查看此documentation.

相关问题