【问题标题】:Azure Search decode base64 file contents for IndexAzure 搜索为索引解码 base64 文件内容
【发布时间】:2018-10-28 09:21:29
【问题描述】:

我正在尝试在包含大量 .htm 文件的 blob 容器上使用 Azure 搜索。这些文件中的每一个都完全用base64编码并带有填充。这些文件之一可能是“example.htm”,如果您打开它,您会看到:

//This decodes to html
PCEtLSBBIHNlZ21lbnQgb2YgYSBzd2VldCBib2R5IC0tPg0KPGRpdiBjbGFzcz0iYS1uaWNlLWNsYXNzIiBpZD0iaW1tYS1pZCI+DQoJPHA+Q2F0J3MgYXJlIGhhcmQgdG8gZGVjb2RlPC9wPg0KPC9kaXY+

我试图在我的索引器中添加一个字段映射来解码它。如果我设置 "useHttpServerUtilityUrlTokenDecode": true 然后我得到 “将映射函数 'base64Decode' 应用到字段 'NAME' 时出错:数组不能为空。\r\n参数名称:字节”。 ,如果我将其设置为 false 则即使它说“成功”,也不会索引任何文件。

{
"name":"demoindexer", 
"dataSourceName" : "demodata",
"targetIndexName" : "demoindex",
"fieldMappings" : [
    {
      "sourceFieldName" : "content",
      "targetFieldName" : "content",
      "mappingFunction" : 
        { "name" : "base64Decode", "parameters" : { 
        "useHttpServerUtilityUrlTokenDecode" : false } }
    }
],
"parameters":
{
  "maxFailedItems":-1,
  "maxFailedItemsPerBatch":-1
}
}

似乎一条线索可能是 Azure 的字段映射页面上的一条注释,其中指出“对于带填充的 Base64 编码,使用 URL 安全字符并在库编码后通过额外处理删除填充”。我不确定这是否可以通过 Azure 搜索 API 来完成,如果可以的话如何去做,或者它是否只是在上传到 Azure 存储之前以不同的方式编码。

我将如何为我的索引解码这些文件的内容,以便搜索结果不会返回 base64 字符串?

【问题讨论】:

    标签: azure base64 decode azure-cognitive-search indexer


    【解决方案1】:

    如果我正确理解您的情况,您的 blob 仅包含 base64 编码的文本。如果是这样,您应该使用text 解析模式来保留您的文本,以便对其进行解码。见Indexing plain text

    修改索引器以使用文本解析模式后,不要忘记将reset 发送到索引器,以便它从头开始索引您的 blob。这是必要的,因为自从您设置"maxFailedItems" : -1 以来,索引器之前跳过了 blob。

    【讨论】:

    • 感谢您的评论。似乎这是朝着正确的方向发展,但还没有得到一个健康的人口指数。如果我能取得进展,我将继续调查并更新此回复。我想我需要弄清楚解析方法是什么,并尝试了“base64”,但它不接受这个。
    • 请阅读我上面链接的索引纯文本文章。它显示了如何设置parsingMode 属性。
    猜你喜欢
    • 2016-11-13
    • 2018-11-19
    • 2021-10-13
    • 2010-12-16
    • 1970-01-01
    • 2017-05-27
    • 2011-11-07
    • 2021-06-07
    • 2011-09-25
    相关资源
    最近更新 更多