elasticsearch 有没有办法让NEST直接反序列化到结果中?,elasticsearch,nest,plainelastic.net,elasticsearch,Nest,Plainelastic.net" /> elasticsearch 有没有办法让NEST直接反序列化到结果中?,elasticsearch,nest,plainelastic.net,elasticsearch,Nest,Plainelastic.net" />

elasticsearch 有没有办法让NEST直接反序列化到结果中?

elasticsearch 有没有办法让NEST直接反序列化到结果中?,elasticsearch,nest,plainelastic.net,elasticsearch,Nest,Plainelastic.net,我目前正在考虑编写一个ElasticSearch.Net/NEST客户端,作为PlainElastic.Net的可能替代品(因为ElasticSearch.Net具有我想要使用的故障切换功能) 在PlainElastic中,我可以这样写: var command = new SearchCommand(index, type); var result = Connection.Post(command, query); var searchResult = Serializer.ToSearch

我目前正在考虑编写一个ElasticSearch.Net/NEST客户端,作为PlainElastic.Net的可能替代品(因为ElasticSearch.Net具有我想要使用的故障切换功能)

在PlainElastic中,我可以这样写:

var command = new SearchCommand(index, type);
var result = Connection.Post(command, query);
var searchResult = Serializer.ToSearchResult<T>(result);
return searchResult.Documents;
这将返回一个我试图单独反序列化的结果,因为原始尝试使用键入的版本:

var result = client.Search<T>("index", "type", query, null);

因此,我认为我最初的问题仍然是相同的,但更多的是试图理解为什么NEST在非类型化版本中检索结果,但在类型化版本中无法进行序列化

查询的响应将是一个
Nest.ISearchResponse
。通过访问响应中的Documents属性,您将得到一个
IEnumerable
,它是与搜索匹配的结果列表

更新 为了回答更新后的问题:
T
In
var result=client.Search(“index”,“type”,query,null)
应该是您在命令中包含的确切的
“type”
,而不是通用的T。

SearchResponse有一个Hits属性(如果我没记错的话,类型是
IEnumerable

然后,每个命中都有一个类型为T的源属性

所以


为您提供
IEnumerable

在我的情况下,h.Source始终为空。我在Fields字典中得到了一个id(例如用户id),仅此而已。您是否需要任何字段?如果你这样做,源代码不会返回。事实上,后来我发现了问题所在。当我移除了field defs时,一切都很好。无论如何,谢谢:)然后您可以在
IEnumerable
上调用
.ToList()
。谢谢!:)
var result = client.Search("index", "type", query, null);
var result = client.Search<T>("index", "type", query, null);
System.NullReferenceException was unhandled by user code
  HResult=-2147467261
  Message=Object reference not set to an instance of an object.
  Source=Elasticsearch.Net
  StackTrace:
       at     Elasticsearch.Net.Serialization.PocoJsonSerializerStrategy.DeserializeObject(    Object value, Type type) in C:\code\elasticsearch-    net\src\Elasticsearch.Net\Serialization\SimpleJson.cs:line 1370
       at Elasticsearch.Net.Serialization.SimpleJson.DeserializeObject(String json, Type type, IJsonSerializerStrategy jsonSerializerStrategy) in C:\code\elasticsearch-net\src\Elasticsearch.Net\Serialization\SimpleJson.cs:line 553
   at Elasticsearch.Net.Serialization.SimpleJson.DeserializeObject[T](String json) in C:\code\elasticsearch-net\src\Elasticsearch.Net\Serialization\SimpleJson.cs:line 570
   at Elasticsearch.Net.Serialization.ElasticsearchDefaultSerializer.Deserialize[T](Stream stream) in C:\code\elasticsearch-net\src\Elasticsearch.Net\Serialization\ElasticsearchDefaultSerializer.cs:line 27
   at Elasticsearch.Net.Connection.RequestHandlers.RequestHandler.StreamToTypedResponse[T](ElasticsearchResponse`1 streamResponse, ITransportRequestState requestState, Byte[] readBytes) in C:\code\elasticsearch-net\src\Elasticsearch.Net\Connection\RequestHandlers\RequestHandler.cs:line 254
   at Elasticsearch.Net.Connection.RequestHandlers.RequestHandler.ReturnTypedResponse[T](TransportRequestState`1 requestState, ElasticsearchResponse`1 streamResponse, ElasticsearchServerError& error) in C:\code\elasticsearch-net\src\Elasticsearch.Net\Connection\RequestHandlers\RequestHandler.cs:line 106
   at Elasticsearch.Net.Connection.RequestHandlers.RequestHandler.CoordinateRequest[T](TransportRequestState`1 requestState, Int32 maxRetries, Int32 retried, Boolean& aliveResponse) in C:\code\elasticsearch-net\src\Elasticsearch.Net\Connection\RequestHandlers\RequestHandler.cs:line 131
   at Elasticsearch.Net.Connection.RequestHandlers.RequestHandler.DoRequest[T](TransportRequestState`1 requestState) in C:\code\elasticsearch-net\src\Elasticsearch.Net\Connection\RequestHandlers\RequestHandler.cs:line 177
   at Elasticsearch.Net.Connection.RequestHandlers.RequestHandler.Request[T](TransportRequestState`1 requestState, Object data) in C:\code\elasticsearch-net\src\Elasticsearch.Net\Connection\RequestHandlers\RequestHandler.cs:line 34
   at Elasticsearch.Net.Connection.Transport.DoRequest[T](String method, String path, Object data, IRequestParameters requestParameters) in C:\code\elasticsearch-net\src\Elasticsearch.Net\Connection\Transport.cs:line 343
   at Elasticsearch.Net.ElasticsearchClient.DoRequest[T](String method, String path, Object data, IRequestParameters requestParameters) in C:\code\elasticsearch-net\src\Elasticsearch.Net\ElasticsearchClient.cs:line 65
   at Elasticsearch.Net.ElasticsearchClient.Search[T](String index, String type, Object body, Func`2 requestParameters) in C:\code\elasticsearch-net\src\Elasticsearch.Net\ElasticsearchClient.Generated.cs:line 33515
var enumerable = results.Hits.Select(h => h.Source);