Как добавить первичный ключ базы данных Azure Cosmos в качестве параметра поиска в службу поиска Azure
Я использую службу поиска 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",
}
Как получить мой оригинальный идентификатор и установить его в качестве параметра поиска?
Заранее спасибо!!
2 ответа
UkVRX1ZFSF9DVVNUX0
является строкой в кодировке base64 и при ее декодировании вы получаете REQ_VEH_CUST_
,
Почему значения преобразуются в строку в кодировке base64?
Пожалуйста, проверьте детали индексатора. Поскольку существуют ограничения на значение в key
поле ( https://docs.microsoft.com/en-us/rest/api/searchservice/naming-rules - см. Document Key
), вероятно, есть настройка в индексаторе (посмотрите в разделе отображения полей, а затем проверьте, base64Encode
Функция отображения применяется на id
сопоставление полей), который преобразует и сохраняет значение в виде строки в кодировке base64.
Если вы уверены, что ценность id
в источнике (то есть key
поле в индексе) не будет нарушать правило для значения ключевого поля, вы можете удалить эту функцию отображения base64 encode, сохранить индексатор, сбросить индексатор и запустить его снова. На этот раз данные будут сохранены как есть в источнике.
На основе комментария комментария @GauravMantri, так как ваш идентификатор кодируется с помощью base 64 перед сохранением, так что вы можете удалить кодировку при сохранении идентификатора, если эти данные являются уникальным ключом сами по себе без кодировки, как это предлагается.
В качестве альтернативы вы можете указать конечное значение, которое у вас уже есть System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("IdBeforeEncodingAsString"))
& использовать в качестве параметра поиска, он должен работать, так как значение этой строки в кодировке base 64 хранится как Id.