如何将嵌套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(); }
- 我可以将Activator.CreateInstance与接口一起使用吗?
- 遍历属性时,ActiveDirectory错误0x8000500c
- VS 2015中的连接字符串
- 提供异步串口通信
- C#WinForms模型 – 视图 – 演示者(被动视图)
- reflection发射:如何为此构建构造函数
- 自定义MSBuild任务:如何在任务仍在运行时刷新VS2012输出窗口中的日志记录?
- 如何在winforms C#中自动保存并自动加载所有属性?
- Nhibernate / Linq:NHibernate.QueryException:无法解析属性:Profile.class:MyNamespace.MyObject