Hi,
I was wondering How to get the inner hits of a nested query?
 SearchResponse response = client.prepareSearch("trace-index2")
                .setTypes("trace-log2")
                .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                .setQuery(QueryBuilders.nestedQuery("spans",
                        QueryBuilders.boolQuery().must(QueryBuilders.termQuery("Name", "FindIDs")), ScoreMode.None))
                .setFrom(0).setSize(10).setExplain(true)
                .get(); 
             
            
               
               
               
            
            
           
          
            
              
                spinscale  
                (Alexander Reelsen)
               
              
                  
                    September 12, 2017,  7:09am
                   
                   
              2 
               
             
            
              check the NestedQueryBuilder returned by QueryBuilders.nestedQuery in order to configure inner hits.
--Alex
             
            
               
               
               
            
            
           
          
            
            
              thanks @spinscale  for the reply. I implemented as you suggested. the code is as follows.
                .setQuery(QueryBuilders.nestedQuery("spans",
                        QueryBuilders.boolQuery().must(QueryBuilders.termQuery("spans.operationName", "FindDriverIDs")), ScoreMode.None)
                    .innerHit(new InnerHitBuilder("spansInnerHit")
                            .addDocValueField("spans.duration")
                            .setSize(10)))
                .addDocValueField("duration")
                .setFrom(0).setSize(10).setExplain(true)
                .get();
        for (SearchHit hit : response.getHits().getHits()) {
            if (hit.getInnerHits() != null) {
                for (String innerHitKey : hit.getInnerHits().keySet()) {
                    System.out.println(innerHitKey);
                    for (SearchHit innerHit : hit.getInnerHits().get(innerHitKey).getHits()) {
                        for (String key : innerHit.getFields().keySet()) {
                            SearchHitField innerObj = innerHit.getFields().get(key);
                            System.out.println(innerObj.getName() + " " + innerObj.getValue());
                        }
                    }
                }
            }
        }
    } 
 
But I do not get results. i know for a fact that there is a match with the query. I tested with the GET API.
curl -XGET 'localhost:9200/index/_search?pretty' -H 'Content-Type: application/json' -d'
{
  "query": {
    "nested": {
      "path": "spans",
      "query": {
        "bool": {
          "must": [
            { "match": { "spans.operationName": "FindDriverIDs" }}
          ]
        }
      },
      "inner_hits": {
        "highlight": {
          "fields": {
            "spans.operationName": {}
          }
        }
      }
    }
  }
}
'
 
Am I missing anything obvious ?
Thanks
             
            
               
               
               
            
            
           
          
            
              
                system  
                (system)
                  Closed 
               
              
                  
                    October 10, 2017,  6:38pm
                   
                   
              4 
               
             
            
              This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.