我想以编程方式执行 Azure 索引器的操作,将文档从数据源推送到 Azure 上的索引。最好用 Python 编写。
可以通过 Azure 索引器完成,但我想自己处理这个推送逻辑。
文档有多种格式,最常见的是
docx, pdf, pptx
。
假设 Azure 索引已存在,并且可以在此自定义索引器的范围内检索文档。
我想做一些类似this的事情,其中包括使用非常自定义的批量大小、频率、多线程策略推送文档。
到目前为止我只知道如何推送 JSON 格式的数据,这可以通过 Python Azure SDK 调用来完成
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]
以下是我想到的一些可能性:
通过一些 Python 库从内部提取文本,以某种方式将任意文件转换为 JSON。这种方法的稳健性非常不确定。大于普通可传输 JSON 的文件也会导致拼接复杂化。
希望存在一些用于以二进制格式传输文件的 API 调用。解码可以在自定义索引器端完成,并将自定义技能组应用于此类文件。然后编码回来并推送到 Azure 索引。
根据提供的信息,一种可能的解决方案是使用 Azure 文件索引器(预览版)将 docx、pdf 和 pptx 等非 JSON 文件推送到 Azure 索引。该索引器可以从各种文档格式中提取文本,并使其可在 Azure 认知搜索中搜索。
以下是 Azure 文件索引器支持的一些相关文档格式:
截至目前,该服务已作为公共预览版提供,您可以通过 REST API 和
python and request package
使用它。
有关设置和配置的详细信息,您可以查看此文档。