Elasticsearch中如何从IGetResponse获取目标文档POCO?
解决NEST中IGetResponse无法获取文档字段的问题
你完全不需要做类型转换,问题出在你没注意到IGetResponse<MyDocument>里的**Source属性**——这才是存储你检索到的MyDocument实例的核心地方!
当调用Client.Get<MyDocument>(request)成功且result.Found为true时,你要的所有文档字段都封装在result.Source中。修改你的代码就能直接拿到目标数据:
TypeName typeName = TypeName.From<MyDocument>(); GetRequest request = new GetRequest(Index, typeName, new Id("R" + id)); IGetResponse<MyDocument> result = Client.Get<MyDocument>(request); // 提取出真正的文档实例 if (result.Found && result.Source != null) { MyDocument targetDocument = result.Source; // 现在可以正常访问targetDocument的所有字段,比如targetDocument.Id、targetDocument.Content等 }
再补充两个实用提示:
- 如果
result.Source意外为null,可以检查你的MyDocument类是否和Elasticsearch中的文档字段正确映射(比如属性名是否一致,或者有没有用[PropertyName]特性指定对应字段名) - 你也可以用更简洁的Lambda语法构建请求,代码会更紧凑:
var result = Client.Get<MyDocument>( "R" + id, g => g.Index(Index).TypeName(typeName) );
内容的提问来源于stack exchange,提问作者Omar Himada
相关产品推荐
相关产品推荐

