1

我正在使用 Azure 搜索服务来搜索我的 Azure CosmosDB 帐户中的文档。

使用该门户,我创建了一个 Azure 搜索服务并将我现有的 CosmosDB 作为数据源。

以下是存储在 CosmosDB 中的示例文档

{
    "id": "Engine",     
    "Sub-Components Price": [
        //Price list
    ],
    "Sub-Components": [
        "List of sub components here"
    ],      
    "Brand": "Brand Name here",     
}

当包含上述文档的 CosmosDB 作为数据源提供给 Azure 搜索时,id 字段在内部转换为某个字符串(可能是自动索引)。

我可以将其他字段(例如子组件、品牌)设置为搜索参数(使用 C#)并仅搜索那些特定字段。我也想将相同的应用于 id 字段。但是 id 字段加密/编码为其他一些字符串,如下所示:

{
    "id": "UkVRX1ZFSF9DVVNUX0",     
    "Sub-Components Price": [
        //Price list
    ],
    "Sub-Components": [
        "List of sub components here"
    ],      
    "Brand": "Brand Name here",     
}

如何检索我的原始 ID 并将其设置为搜索参数?

提前致谢 !!

4

2 回答 2

4

UkVRX1ZFSF9DVVNUX0是一个 base64 编码的字符串,当你解码它时,你会得到REQ_VEH_CUST_.

为什么这些值要转换为 base64 编码的字符串?

请检查索引器详细信息。由于字段中的值存在限制keyhttps://docs.microsoft.com/en-us/rest/api/searchservice/naming-rules - 请参阅Document Key),索引器中可能有一个设置(查看字段映射部分,然后检查base64Encode映射函数是否应用于id字段映射)将值转换并存储为 base64 编码字符串。

如果您确信idin source(即key索引中的字段)的值不会违反关键字段值的规则,您可以删除这个 base64encode 映射函数,保存索引器,重置索引器并再次运行它。这次数据将按原样保存在源中。

于 2019-02-07T09:15:05.067 回答
1

基于@GauravMantri 评论的评论,因为您的 id 在存储之前是基于 64 位编码的,因此如果该数据本身是唯一键而没有按照建议进行编码,您可以在存储 Id 时删除编码。

或者,您可以对您已经拥有的值进行结束System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("IdBeforeEncodingAsString"))编码并用作搜索参数,它应该可以工作,因为此字符串的 base64 编码值存储为 Id。

于 2019-02-07T09:27:29.800 回答