Как отключить оболочку верблюда? Имена полей Elasticsearch в NEST?

По умолчанию NEST будет возвращать объект объекта и свойства верблюда при отправке объекта в Elasticsearch для индексирования. Как имена полей полей верблюда могут быть отключены в NEST для документов Elasticsearch? Я провел немало исследований и там поток списка рассылки по этому вопросу, но он кажется устаревшим, поскольку некоторые из методов были переименованы или больше не существует.

IConnectionPool connectionPool = new SniffingConnectionPool(m_ElasticsearchNodeUris);
ConnectionSettings settings = new ConnectionSettings(connectionPool);
settings.SetDefaultTypeNameInferrer(p => p.Name); //This disables camel casing for object type names
ElasticClient client = new ElasticClient(settings);

Информация в списке рассылки указывает, что этот код должен быть добавлен для обработки объектов для имен полей, но клиентский метод, похоже, не существует:

client.ModifyJsonSerializationSettings(s => s.ContractResolver = new Nest.Resolvers.ElasticResolver(settings);

Есть ли у кого-нибудь обновленный синтаксис для этого? Спасибо.

Ответ 1

ConnectionSettings.SetDefaultPropertyNameInferrer() - это то, что вы ищете. Этот метод принимает функцию, которая принимает имя свойства и применяет к нему преобразование. Затем функция вызывается для каждого из ваших свойств до того, как запросы будут отправлены в Elasticsearch.

Если вы хотите, чтобы ваши имена свойств были нетронутыми, вы можете сделать это:

settings.SetDefaultPropertyNameInferrer(p => p)

p => p здесь просто просто функция, которая берет строку (ваше имя свойства) и возвращает ту же строку без изменений.

Ответ 2

В версии 2.5.0 это:

settings.DefaultFieldNameInferrer(p => p)