2014-12-03 67 views
10

默认情况下,将对象发送到Elasticsearch以进行索引时,NEST将驼峰大小写对象和属性名称。在NEST for Elasticsearch文档中,如何禁用骆驼套管字段名称?我已经做了相当多的研究,关于这个问题有一个mailing list thread,但它似乎过时了,因为一些方法已被重命名或不再存在。 如何在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); 

没有人有任何更新语法来处理这个?谢谢。

+0

你是如何想的'Name'跨来..? 'UpperCase,LosweCase ..?'请澄清..如果你不能使用'.ToUpper()或ToLower()'例如 – MethodMan 2014-12-03 22:44:06

+0

@DJKRAZE:我根本不想修改这个名字。当我发送一个要编制索引的对象时,我希望该对象的属性名称不受干扰。注意:settings.SetDefaultTypeNameInferrer仅影响对象类型(如果您在构建请求时没有用其他更具体的内容覆盖它,通常会推断为Elasticsearch文档类型)。该行代码与对象的属性名称无关。 – Ellesedil 2014-12-03 22:45:55

回答

13

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

如果你想保持你的属性名称不变,那么你可以这样做:

settings.SetDefaultPropertyNameInferrer(p => p)

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

+0

非常好。因此'settings.SetDefaultTypeNameInferrer(p => p.Name);'和'settings.SetDefaultPropertyNameInferrer(p => p);'将会禁用整个对象的骆驼套管(这可能是Elasticsearch中的类型和字段名称)? – Ellesedil 2014-12-04 14:54:48

+0

这是正确的。 – 2014-12-04 14:58:38

3

在2.5.0版是:

settings.DefaultFieldNameInferrer(p => p)