有可能与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之前将它们更改为大写。 –