【问题标题】:Value cannot be null. Parameter name: key值不能为空。参数名称:key
【发布时间】:2015-11-05 07:35:29
【问题描述】:

我正在使用 NEST 让一些聚合工作,但我总是得到“值不能为空。参数名称:键”

我更新了查询

你能帮帮我吗?

代码:

 var agg = esclient.Search<Artifact>(s => s.Aggregations(ag => ag
            .Filter("refineSearch", fi => fi.Filter(fl => fl.Bool(b => b
                .Should(sh => sh.Terms("multimediaReferenceList.mimeType", input.Filters.Media)
                              && sh.Terms("physicalLocations.level1", input.Filters.Location)
                              && sh.Terms("objectCategory", input.Filters.Type)
                              && sh.Range(r => r.GreaterOrEquals(input.Years[0]).OnField(of => of.MinYear))
                              && sh.Range(ra => ra.LowerOrEquals(input.Years[1]).OnField(od => od.MaxYear)))))
                .Aggregations(aa => aa
                        .Terms("type", att => att.Field("objectCategory"))
                        .Terms("media", att => att.Field("multimediaReferenceList.mimeType"))
                        .Terms("location", att => att.Field("physicalLocations.level1"))))));

堆栈跟踪:

   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)   at Nest.Resolvers.Converters.Aggregations.AggregationConverter.GetNestedAggregations(JsonReader reader, JsonSerializer serializer)
   at Nest.Resolvers.Converters.Aggregations.AggregationConverter.GetSingleBucketAggregation(JsonReader reader, JsonSerializer serializer)
   at Nest.Resolvers.Converters.Aggregations.AggregationConverter.ReadAggregation(JsonReader reader, JsonSerializer serializer)
   at Nest.Resolvers.Converters.Aggregations.AggregationConverter.ReadJson(JsonReader reader, Type objectType, Object existingValue, JsonSerializer serializer)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(JsonConverter converter, JsonReader reader, Type objectType, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateDictionary(IDictionary dictionary, JsonReader reader, JsonDictionaryContract contract, JsonProperty containerProperty, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Nest.NestSerializer.DeserializeUsingSettings[T](Stream stream, JsonSerializerSettings settings)
   at Nest.NestSerializer.Deserialize[T](Stream stream)
   at Nest.NestSerializer.DeserializeInternal[T](Stream stream, JsonConverter converter)
   at Nest.ElasticClient.FieldsSearchDeserializer[T,TResult](IElasticsearchResponse response, Stream stream, ISearchRequest d)
   at Nest.ElasticClient.<>c__DisplayClass1f9`2.<CreateSearchDeserializer>b__1f8(IElasticsearchResponse r, Stream s)
   at Elasticsearch.Net.Connection.RequestHandlers.RequestHandler.StreamToTypedResponse[T](ElasticsearchResponse`1 streamResponse, ITransportRequestState requestState, Byte[] readBytes)
   at Elasticsearch.Net.Connection.RequestHandlers.RequestHandler.ReturnTypedResponse[T](TransportRequestState`1 requestState, ElasticsearchResponse`1 streamResponse, ElasticsearchServerError& error)
   at Elasticsearch.Net.Connection.RequestHandlers.RequestHandler.CoordinateRequest[T](TransportRequestState`1 requestState, Int32 maxRetries, Int32 retried, Boolean& aliveResponse)
   at Elasticsearch.Net.Connection.RequestHandlers.RequestHandler.DoRequest[T](TransportRequestState`1 requestState)
   at Elasticsearch.Net.Connection.RequestHandlers.RequestHandler.Request[T](TransportRequestState`1 requestState, Object data)
   at Elasticsearch.Net.Connection.Transport.DoRequest[T](String method, String path, Object data, IRequestParameters requestParameters)
   at Elasticsearch.Net.ElasticsearchClient.Search[T](Object body, Func`2 requestParameters)
   at Nest.ElasticClient.Search[T,TResult](Func`2 searchSelector)
   at THF.CMS.Api.SearchManager.GetSearchResults(SearchRequest input) in c:\inetpub\wwwroot\SearchManager.cs:line 71

【问题讨论】:

  • 错误消息和堆栈跟踪很明显,并立即告诉您出了什么问题。在如此疯狂的聚合链接中,应该用作字典中的键的特定值是空的。查看您的数据并考虑重构那个巨大的 codecaterpillar。它可以促进改进数据和聚合的调试和验证
  • 或者至少考虑格式化语句以对单个查询/聚合有视觉反馈

标签: linq elasticsearch nest


【解决方案1】:

您尝试使用 null 作为键在 Dictionary 中搜索某些内容,即:

Dictionary<DataType, AlsoDataType> dict = new Dictionary<DataType, AlsoDataType>();

DataType key = null;

Console.WriteLine(dict[key].ToString()); // <-------- key is null

【讨论】:

  • 我使用 NEST,但我无法知道在哪里以及哪个值为 null。我尝试拆分 Linq,但出现异常,指出无法反序列化 Integer。
  • 反序列化对象时出现意外令牌:整数。路径 'aggregations.names.doc_count_error_upper_bound' 嵌套代码:var exp = esclient.Search(s => s.Aggregations(ag => ag.Terms("names", st => st.Field("objectCategory") .Size(10) .Aggregations(aa => aa.Terms("type", t => t.Field(f => f.ObjectCategory))))));此嵌套代码是来自 NEST 网站的示例嵌套代码
猜你喜欢
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多