有可能與NEST兩者都做,而無需使用屬性:
改變POCO的屬性名稱外殼當序列化併發送給Elasticsearch時,請使用DefaultFieldNameInferrer(Func<string, string>)
改變類型的名稱和重命名屬性,使用InferMappingFor<T>()
與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; }
}
索引請求和響應
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
}
你是否也想更改舊文件? – RoiHatam
目前還不清楚你在問什麼;你想改變類型的源代碼,還是想控制它們如何序列化爲json,以控制C#POCO中每個屬性的_type和field屬性? –
我只想重命名屬性,並在索引到elasticsearch之前將它們更改爲大寫。 –