Nest преобразует первую букву поля в нижний регистр в запросе

#c# #.net #elasticsearch #.net-core #nest

#c# #.net #elasticsearch #.net-core #гнездо

Вопрос:

Я пытаюсь ввести словарь <string, string> в elasticsearch, но первая буква ключей преобразуется в маленькую букву. свойство словаря в сущности

 public Dictionary<string, Dictionary<string, string>> CurrentJson { get; set; }
public string CURRENT_JSON
{
    set
    {
        CurrentJson = new Dictionary<string, Dictionary<string, string>>
        { { TableName.ToUpper(), JsonConvert.DeserializeObject<Dictionary<string, string>>(value) } };
    }
}
 

ключи, когда я устанавливаю словарь, будут заглавными. буквы

функция upsert

 public async Task<T> Upsert(T document, string username = "N/A")
{
    // check if name is duplicated
    if (!await IsUniqueDocument(document))
        throw new Exception("name duplicated");
    
    PrepareDocument(document, username);
    
    IndexRequest<T> request = new IndexRequest<T>(document, IndexName, TypeName, document.Id);
    var response = await Client.IndexAsync<T>(request);
    if (response.IsValid) return document;
    // TODO: check thrown error
    throw new Exception(response.Result.ToString());
}
 

примечание: функция prepareDocument не изменяет словарь

Ответ №1:

Взгляните на документацию по полевому выводу клиента NEST: https://www.elastic.co/guide/en/elasticsearch/client/net-api/7.x/field-inference.html#camel-casing

Если вы хотите, чтобы NEST вообще не менял регистр имен полей, просто передайте Func<string,string> в DefaultFieldNameInferrer, который просто возвращает входную строку

setup = WithConnectionSettings(s => s.DefaultFieldNameInferrer(p => p));