【问题标题】:How to disable camel casing Elasticsearch field names in NEST?如何在 NEST 中禁用驼峰式 Elasticsearch 字段名称?
【发布时间】: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 文档类型)。那行代码与对象的属性名称无关。

标签: c# elasticsearch nest


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-09
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2016-04-08
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多