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

Posted

技术标签:

【中文标题】如何在 NEST 中禁用驼峰式 Elasticsearch 字段名称?【英文标题】:How to disable camel casing Elasticsearch field names in NEST? 【发布时间】:2015-02-01 16:10:19 【问题描述】:

默认情况下,NEST 在将对象发送到 Elasticsearch 进行索引时,会将对象和属性名称命名为驼峰式。如何在 Elasticsearch 文档的 NEST 中禁用驼峰式字段名称?我已经进行了大量的研究,并且有一个关于这个主题的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);

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

【问题讨论】:

您希望Name 怎么出现..? UpperCase, LosweCase..? 请澄清..如果你不能使用 .ToUpper() or ToLower() 例如 @DJKRAZE:我根本不想修改名字。当我发送要索引的对象时,我希望对象的属性名称不受影响。注意:settings.SetDefaultTypeNameInferrer 仅影响对象类型(如果您在构建请求时不使用其他更具体的内容覆盖它,通常会推断为 Elasticsearch 文档类型)。那行代码与对象的属性名称无关。 【参考方案1】:

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

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

settings.SetDefaultPropertyNameInferrer(p => p)

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

【讨论】:

优秀。那么settings.SetDefaultTypeNameInferrer(p => p.Name);settings.SetDefaultPropertyNameInferrer(p => p); 将禁用整个对象的驼峰式大小写(这将是 Elasticsearch 中的类型和字段名称)?【参考方案2】:

在 2.5.0 版本中是:

settings.DefaultFieldNameInferrer(p => p)

【讨论】:

以上是关于如何在 NEST 中禁用驼峰式 Elasticsearch 字段名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JavaScript 中将驼峰式字符串转换为破折号?

JSX 的语法高亮显示在 VS Code 中针对非驼峰式组件道具损坏

使用 Spark 编写数据集时,如何将驼峰式列名修改为带下划线的小写?

如何摆脱告诉我将 svg 属性更改为驼峰式大小写的反应错误警告?

驼峰式方法名称

将任何字符串转换为驼峰式大小写