Как добавить первичный ключ базы данных Azure Cosmos в качестве параметра поиска в службу поиска Azure - PullRequest
0 голосов
/ 07 февраля 2019

Я использую службу поиска Azure для поиска документов в моей учетной записи Azure CosmosDB.

Используя портал, я создал службу поиска Azure и предоставил свой существующий CosmosDB в качестве источника данных.

Ниже приведен пример документа, хранящегося в CosmosDB

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

Когда в качестве источника данных для поиска в Azure предоставляется CosmosDB, содержащий указанный выше документ, поле идентификатора внутренне преобразуется в некоторую строку (автоматическое индексирование может быть).

Я могу установить другие поля, такие как Подкомпоненты, Бренд, в качестве параметра поиска (используя C #) и выполнять поиск только по этим конкретным полям.Я хочу применить то же самое к полю id также.Но поле id зашифровано / закодировано в какую-то другую строку следующим образом:

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

Как получить мой оригинальный идентификатор и установить его в качестве параметра поиска?

Заранее спасибо !!

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

На основе комментария комментария @GauravMantri, поскольку перед вашим идентификатором используется кодировка Base 64 перед сохранением, так что вы можете удалить кодировку при сохранении идентификатора, если эти данные являются уникальным ключом сами по себе без кодировки, как это предлагается.

В качестве альтернативы вы можетезначение конечного кода, которое у вас уже есть, например System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("IdBeforeEncodingAsString")) и используется в качестве параметра поиска, оно должно работать, поскольку значение этой строки в кодировке base64 сохраняется как Id.

0 голосов
/ 07 февраля 2019

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 в индексе)не будет нарушать правило для значения ключевого поля, вы можете удалить эту функцию отображения base64encode, сохранить индексатор, сбросить индексатор и запустить его снова.На этот раз данные будут сохранены как есть в источнике.

...