我正在使用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并将其设置为搜索参数?
谢谢!
答案 0 :(得分:3)
UkVRX1ZFSF9DVVNUX0
是base64编码的字符串,解码时会得到REQ_VEH_CUST_
。
为什么这些值会转换为base64编码的字符串?
请检查索引器详细信息。由于key
字段中的值存在限制(https://docs.microsoft.com/en-us/rest/api/searchservice/naming-rules-请参见Document Key
),因此索引器中可能有一个设置(请在字段映射部分下查看,然后检查{{1 }}映射功能应用于base64Encode
字段映射),该函数正在将值转换并存储为base64编码的字符串。
如果您确信源文件中id
的值(即索引中的id
)不会违反键字段值的规则,则可以删除此base64encode映射函数,保存索引器,重置索引器,然后再次运行。这次,数据将按原样保存在源中。
答案 1 :(得分:1)
基于@GauravMantri注释的注释,因为您的id在存储之前是基于64编码的,因此,如果该数据本身是唯一键而不建议编码,则可以在存储ID时删除编码。
或者,您可以像System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("IdBeforeEncodingAsString"))
那样结束已经具有的值并用作搜索参数,因为该字符串的base64编码值存储为ID,所以它应该可以工作。