elasticsearch 如何将类属性转换为大写,并在使用c的elasticsearch中重命名少数不带属性的属性#,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 如何将类属性转换为大写,并在使用c的elasticsearch中重命名少数不带属性的属性#,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 如何将类属性转换为大写,并在使用c的elasticsearch中重命名少数不带属性的属性#

elasticsearch 如何将类属性转换为大写,并在使用c的elasticsearch中重命名少数不带属性的属性#,elasticsearch,nest,elasticsearch,Nest,我在C#中使用elasticsearch将一些数据放入elasticsearch。我已根据数据库(PascalCase)保存了我的C#类和属性。但是,我的要求是将所有属性转换为大写,并将少数属性的名称更改为另一个名称。类名也可以使用相同的名称 我不想通过数据注释来实现这一点。有没有什么方法可以使所有C类都通用 我使用的是NEST 5.X版本 比如说, class Foo { public string thisMessage {get; set; } public stri

我在C#中使用elasticsearch将一些数据放入elasticsearch。我已根据数据库(PascalCase)保存了我的C#类和属性。但是,我的要求是将所有属性转换为大写,并将少数属性的名称更改为另一个名称。类名也可以使用相同的名称

我不想通过数据注释来实现这一点。有没有什么方法可以使所有C类都通用

我使用的是NEST 5.X版本

比如说,

class Foo 
{
     public string thisMessage {get; set; }
     public string anotherMessage {get; set; }
}
应转换为

class FOOABC
{
    public string THISMESSAGE {get; set; }
    public string ANOTHER {get; set; }
}

可以在不使用属性的情况下使用嵌套同时执行这两项操作:

  • 要在序列化并发送到Elasticsearch时更改POCO属性名称的大小写,请使用
    DefaultFieldNameInferrer(Func)

  • 要更改类型名称并重命名属性,请将
    InferMappingFor()
    TypeName()
    rename()

  • 这里有一个例子

    void Main()
    {
        var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
        var defaultIndex = "default-index";
        var connectionSettings = new ConnectionSettings(pool)
            .DefaultFieldNameInferrer(s => s.ToUpperInvariant())
            .InferMappingFor<Foo>(m => m
                .TypeName("FOOABC")
                .Rename(p => p.anotherMessage, "ANOTHER")
            )
            .DefaultIndex(defaultIndex);
    
        var client = new ElasticClient(connectionSettings);
    
        if (client.IndexExists(defaultIndex).Exists)
            client.DeleteIndex(defaultIndex);
    
        var indexResponse = client.Index(new Foo
        {   
            thisMessage = "this message",
            anotherMessage = "another message"
        });
    }
    
    class Foo
    {
        public string thisMessage { get; set; }
        public string anotherMessage { get; set; }
    }
    

    您是否也要更改旧文档?不清楚您在问什么;您想更改类型的源代码,还是想控制它们序列化为json的方式,以控制C#POCO上每个属性的
    \u type
    和字段属性?我只想重命名属性并在索引到elasticsearch之前将其更改为大写。
    POST http://localhost:9200/default-index/FOOABC?pretty=true 
    {
      "THISMESSAGE": "this message",
      "ANOTHER": "another message"
    }
    
    Status: 201
    {
      "_index" : "default-index",
      "_type" : "FOOABC",
      "_id" : "AVtaHKDcii5CLKx9KIcZ",
      "_version" : 1,
      "result" : "created",
      "_shards" : {
        "total" : 2,
        "successful" : 1,
        "failed" : 0
      },
      "created" : true
    }