Как создать индекс с пользовательскими анализаторами из файла json в пакете SDK для Azure Search .NET?

Я читал, что пакет SDK для поиска Azure .NET использует NewtonSoft.Json для преобразования моделей в / из json в базовых вызовах REST API, поэтому я делал то же самое в своем собственном приложении.

У меня есть простое приложение, которое создает новый индекс с помощью .NET SDK. Для этого я определял свой индекс в файле json, используя формат, описанный здесь https://docs.microsoft.com/en-us/rest/api/searchservice/create-index, а затем я преобразовал это в объект Microsoft.Azure.Search.Models.Index с помощью Newtonsoft.

var index = JsonConvert.DeserializeObject<Microsoft.Azure.Search.Models.Index>(System.IO.File.ReadAllText("config.json");

Это работало нормально до того, как я настроил пользовательские анализаторы, но теперь, когда у меня есть пользовательские анализаторы в моей конфигурации, анализаторы, токенизаторы и TokenFilters не разрешаются в правильные типы. т.е. мой пользовательский анализатор десериализуется как Microsoft.Azure.Search.Models.Analyzer вместо Microsoft.Azure.Search.Models.CustomAnalyzer, то же самое касается Tokenizers и TokenFilters, они десериализуются в базовые типы.

Есть ли простой способ создать такой индекс в .NET SDK из файла json?


person pantryfight    schedule 05.12.2016    source источник


Ответы (1)


К сожалению, этот сценарий не поддерживается официально. Хотя это работает для простых определений индексов, мы работаем, чтобы понять, что нам нужно сделать, чтобы иметь возможность поддерживать все случаи.

Разместите свой запрос на функцию на нашей странице User Voice, чтобы помочь нам расставить приоритеты: https://feedback.azure.com/forums/263029-azure-search

А пока вы можете заставить его работать самостоятельно, адаптировав JsonSerializerSettings код инициализации внизу этот файл.

person Yahnoosh    schedule 07.12.2016
comment
Мне удалось найти обходной путь для создания поддерживаемого JSON. Я получил свой существующий индекс (созданный с помощью REST API) с помощью .NET SDK, а затем преобразовал его в JSON с помощью Newtonsoft с параметром TypeNameHandling.All JsonSerializer. Это сгенерировало файл JSON с аннотированной информацией о типе в свойстве $ type. Я заменил свой предыдущий файл JSON на этот, и теперь я могу сгенерировать свой индекс из этого файла json с помощью .NET SDK, и будут применены все правильные типы. Спасибо за Ваш ответ. - person pantryfight; 08.12.2016