如何将嵌套1.x中返回的搜索结果映射到对象?

我在nest中创建一个查询

var searchResult = ( (ElasticClient)_Db ).Search ( s => s .Index ( Db_deals_IndexName ) .Type ( Db_Package_TypeName ) .From ( request.Page * _DefaultPageSize ) .Size ( _DefaultPageSize ) .Query ( q => q .QueryString ( qs =>qs .OnFields ( f =>f.TenantId ) .Query ( user.Tenant.Id.ToString () ) ) && q.Nested ( n => n .Path ( f => f.List_BorrowerSet[ 0 ] ) .Query ( qm => qm.QueryString ( qs => qs .OnFields ( f => f.List_BorrowerSet.First ().PrimaryBorrower.ContactDetails.Name_First, f => f.List_BorrowerSet.First ().PrimaryBorrower.ContactDetails.Name_Last ) .Query ( request.SearchValue ) ) && qm .Term ( f => f.List_BorrowerSet.First ().IsPrimary, true ) ) ) || q.QueryString ( qs => qs.OnFields ( f => f.Collateral.SubjectProperty.Address.AddressLineText ) .Query ( request.SearchValue ) ) || q.QueryString ( qs => qs.OnFields ( f => f.DisplayName ) .Query ( request.SearchValue ) ) ) .Fields ( f => f.Id, f => f.DisplayName, f => f.List_BorrowerSet[ 0 ].IsPrimary, f => f.List_BorrowerSet[ 0 ].PrimaryBorrower.ContactDetails.Name_First, f => f.List_BorrowerSet[ 0 ].PrimaryBorrower.ContactDetails.Name_Last, f => f.Collateral.SubjectProperty.Address.AddressLineText ) .SortAscending ( f => f.List_BorrowerSet.First ().PrimaryBorrower.ContactDetails.Name_Last ) .SortAscending ( f => f.List_BorrowerSet.First ().PrimaryBorrower.ContactDetails.Name_First ) ); 

这返回6次点击但没有文件。 我查看了命中结果,但我无法弄清楚如何在使用时处理缺失/空字段

 foreach ( var hit in searchResult.Hit) { response.Hits.Add ( new PackageSearchResultItem () { // Id = hit.Fields.FieldValues<List> ( "id" ).FirstOrDefault(), // DisplayName = hit.Fields.FieldValues ( "displayName" ).FirstOrDefault(), // BorrowerFirstName = hit.Fields.FieldValues ( "list_BorrowerSet.primaryBorrower.contactDetails.name_First" ).FirstOrDefault (), // BorrowerLastName = hit.Fields.FieldValues ( "list_BorrowerSet.primaryBorrower.contactDetails.name_Last" ).FirstOrDefault (), // PropertyAddress = hit.Fields.FieldValues ( "collateral.subjectProperty.address.AddressLineText" ).FirstOrDefault () } ); } 

将搜索结果映射到PackageRecordSearchHit对象的正确方法是什么?

如您所见,您将无法获得DOCUMENT。 你只会得到HIT。 这是因为您指定了要返回的特定FIELD集(因此不返回实际文档,仅指定字段)

我认为你通过对新对象之前返回的字段进行空检查来做正确的事情

FWIW在这里是我如何迭代HIT:

  var results = esClient.Search(x => x.Index("logs").SortDescending("timeStamp").Fields("message", "timeStamp").Query(q => q.Range(z => z.OnField("timeStamp").GreaterOrEquals(DateTime.UtcNow.AddHours(-24)))).Size(1000).AllTypes()); IList allMessages = new List(); foreach (IHit x in results.Hits) { var messageValue = x.Fields.FieldValuesDictionary["message"] as JArray; var dateValue = x.Fields.FieldValuesDictionary["timeStamp"] as JArray; var message = messageValue[0].ToString(); var timeStamp = dateValue[0].ToString(); }