如何在 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 编写数据集时,如何将驼峰式列名修改为带下划线的小写?