How do you get search results returned to socket 1.x matched to an object?

I create a request in the socket

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 )

    );

This returns 6 strokes, but no documents. I looked at the impact results, but cannot figure out how to handle the missing / zero field when using

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 ()
    } );
}

What is the correct way to get search results matched against objects PackageRecordSearchHit?

+4
source share
1 answer

You will not receive the DOCUMENTS back as you saw. You will receive only HIT. This is because you specified a specific set of fields that you wanted to return (so that the actual document is not returned, only the specified fields)

, , , ,

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();
        }    
+5

All Articles