2015-08-12 3 views
0

Я использую НЕСТ, чтобы получить некоторые агрегации работать, но то, что я всегда получаю «Значение не может быть null.Parameter имя: ключ»Значение не может быть нулевым. Имя параметра: ключ

Я обновил запрос

Не могли бы вы, пожалуйста, помогите меня.

Код:

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 
+1

сообщение об ошибке и StackTrace является очевидно и сразу же говорит вам, что не так. В пределах этого сумасшедшего количества цепочки агрегации определенное значение, которое должно использоваться как ключ в словаре, равно null. Просмотрите свои данные и подумайте о реорганизации этого огромного codecaterpillar. Это могло бы облегчить отладку и проверку данных и агрегацию. – MABVT

+0

Или, по крайней мере, рассмотреть возможность форматирования операторов с визуальной обратной связью по отдельным запросам/агрегатам. – MABVT

ответ

0

Вы пробовали искать что-то в Dictionary с помощью null для ключа, то есть:

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

DataType key = null; 

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

Я использую NEST, и я не знаю, где и где значение равно null. Я попытался разделить Linq, и я получаю сообщение об исключении Невозможно десериализовать Integer. –

+0

Неожиданный токен при десериализации объекта: целое. Путь 'aggregations.names.doc_count_error_upper_bound' гнездо Код: вар = ехр esclient.Search (s => s.Aggregations ( AG => ag.Terms ("имена", ул => st.Field («objectCategory») . Размер (10) . Агрегации (aa => aa.Terms («тип», t => t.Field (f => f.ObjectCategory)))))); Этот код гнезда является образцом кода гнезда с сайта NEST –

Смежные вопросы