Как добавить первичный ключ базы данных 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.

Другие вопросы по тегам