【发布时间】:2014-08-20 23:46:31
【问题描述】:
我正在嵌套中创建查询
var searchResult = ( (ElasticClient)_Db ).Search<PackageRecord, PackageRecordSearchHit> ( 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 个命中但没有文档。我查看了命中结果,但我不知道在使用时如何处理缺失的 /null 字段
foreach ( var hit in searchResult.Hit)
{
response.Hits.Add ( new PackageSearchResultItem ()
{
// Id = hit.Fields.FieldValues<List<Guid>> ( "id" ).FirstOrDefault(),
// DisplayName = hit.Fields.FieldValues<string[]> ( "displayName" ).FirstOrDefault(),
// BorrowerFirstName = hit.Fields.FieldValues<string[]> ( "list_BorrowerSet.primaryBorrower.contactDetails.name_First" ).FirstOrDefault (),
// BorrowerLastName = hit.Fields.FieldValues<string[]> ( "list_BorrowerSet.primaryBorrower.contactDetails.name_Last" ).FirstOrDefault (),
// PropertyAddress = hit.Fields.FieldValues<string[]> ( "collateral.subjectProperty.address.AddressLineText" ).FirstOrDefault ()
} );
}
将我的搜索结果映射到PackageRecordSearchHit 对象的正确方法是什么?
【问题讨论】:
-
你解决了吗?我将通过 Web API 将结果作为响应内容返回,因此我需要获取 SearchResult 对象并提取对象 Ts 的集合以打包为列表。
-
这很烦人,但我只需要添加一堆空值检查。