我在nest中创建一个查询
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 )
);
Run Code Online (Sandbox Code Playgroud)
这将返回6次点击但没有文件.我查看了热门搜索结果,但是在使用时我无法弄清楚如何处理缺失/空字段
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 ()
} );
}
Run Code Online (Sandbox Code Playgroud)
将搜索结果映射到PackageRecordSearchHit对象的正确方法是什么?
如你所见,你不会得到DOCUMENTs.你只会得到HIT.这是因为您指定了要返回的特定FIELD集(因此不返回实际文档,仅指定字段)
我认为你通过对新对象之前返回的字段进行空检查来做正确的事情
FWIW在这里是我如何迭代HIT:
var results = esClient.Search<JObject>(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<string> allMessages = new List<string>();
foreach (IHit<JObject> 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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1324 次 |
| 最近记录: |