如何获取Elasticsearch中Nest.Field实例的序列化字段名称
问题解答
可以借助已初始化的ElasticClient实例拿到和实际请求序列化规则完全一致的字段名,用实例内置绑定了当前配置的推断器即可。
实现方法
你可以直接调用ElasticClient暴露的Infer.Field()方法,传入你创建的Field对象,就能直接得到序列化后的字段名。补全后的代码如下:
using System; using Nest; using Xunit; namespace Elasticsearch.Tests { public class MyDocument { public string StringField1 { get; set; } } public class SerializeField { [Fact] public void TestFieldName() { var connectionSettings = new ConnectionSettings(new Uri("http://myesdomain.com:9200")); // 就算你自定义了命名规则,最终结果也会和请求序列化一致 // 示例:connectionSettings.DefaultFieldNameInferrer(p => p.ToLower()); var client = new ElasticClient(connectionSettings); var stringField = Infer.Field<MyDocument>(doc => doc.StringField1); // 补充代码如下 string serializedFieldName = client.Infer.Field(stringField); // 默认驼峰命名规则下,这里输出的是 stringField1 Console.WriteLine(serializedFieldName); } } }
说明
- 这个方法得到的结果和ES请求实际序列化的字段名100%一致,因为用的是同一个
ConnectionSettings实例绑定的字段推断规则,包括你自定义的命名转换、[PropertyName]特性配置都会生效。 - 如果你的文档字段标记了
[PropertyName("custom_str_field")]特性,上面的代码返回的结果就是custom_str_field,和实际发往ES的请求中的字段名完全相同。
内容的提问来源于stack exchange,提问作者huha
相关产品推荐
相关产品推荐

