当我使用Elasticsearch.Net客户端进行Get文档请求时,我将_source设置为false并指定我想要返回的存储字段。我不想要_source,因为有大量内容,即使我排除它们,服务器仍然会将源加载到内存中以解析它,这非常慢,我不想要。
当我包含source时,我可以只指定对象类型,它会自动从_source反序列化。我如何使用Fields属性来实现这一点?它的类型是FieldValues:IsADictionaryBase〈string,LazyDocument〉
var response = await client.GetAsync<MyObject>(docId,
s => s.Index(myIndex)
.SourceEnabled(false)
.StoredFields(new string[] {
"MyStringArray1",
"MyStringArray2",
"MyLongValue" }
));
我发现的唯一方法是手动迭代对象中的所有属性。
MyObject mine = new MyObject()
{
MyStringArray1 = response.Fields["MyStringArray1"].As<string[]>(),
MyStringArray2 = response.Fields["MyStringArray2"].As<string[]>(),
MyLongValue = response.Fields.Value<long>("MyLongValue")
};
是否有更简单的方法来反序列化为MyObject类型?
1条答案
按热度按时间okxuctiv1#
要防止获取大数据,可以使用源筛选
使用这种方式,对象将自动序列化,并且所有排除的字段都将为空