如何在NEST中禁用驼峰套管Elasticsearch字段名称?

时间:2014-12-03 22:27:19

标签: c# elasticsearch nest

默认情况下,NEST会在将对象发送到Elasticsearch进行索引时使用驼峰大小写对象和属性名称。如何在NEST中为Elasticsearch文档禁用骆驼套管字段名称?我已经完成了相当多的研究,并且有关于这个主题的mailing list thread,但由于某些方法已经重命名或不再存在,它似乎已经过时了。

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);

有没有人有更新语法来处理这个问题?感谢。

2 个答案:

答案 0 :(得分:16)

ConnectionSettings.SetDefaultPropertyNameInferrer()正是您正在寻找的。此方法接受一个带有属性名称并对其应用转换的函数。然后,在将请求发送到Elasticsearch之前,会在每个属性上调用该函数。

如果您想保持您的房产名称不受影响,那么您可以这样做:

settings.SetDefaultPropertyNameInferrer(p => p)

p => p这里只是一个函数,它接受一个字符串(你的属性名)并返回相同的字符串未修改。

答案 1 :(得分:7)

在2.5.0版本中:

settings.DefaultFieldNameInferrer(p => p)