You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:48:04