2015-09-28 19 views
5

Sto cercando di implementare hit interni con elasticsearch utilizzando l'API Java, ma non riesco a trovare gran parte della documentazione o esempi che altre persone stanno utilizzando. Io ho la mia ricerca JSON che funziona come segue:I successi interni di Elasticsearch in java api

{ 
    "query": { 
    "filtered": { 
     "query": { 
     "match_all": {} 
     }, 
     "filter": { 
     "nested": { 
      "path": "locations", 
      "filter": { 
      "geo_distance": { 
       "distance": "20km", 
       "locations.address.geoLocation": { 
       "lat": 38.07061, 
       "lon": -76.77514 
       } 
      } 
      }, 
      "inner_hits": {} 
     } 
     } 
    } 
    } 
} 

vedo un InnerHitsBuilder e addInnerHit metodi nella libreria elasticsearch ma non riesco a trovare la documentazione su come usarli.

risposta

7

Si noti che ci sono molti casi di test nel codice sorgente ES in cui ogni funzione viene testata, quindi la navigazione nel codice ES è una fonte di informazioni incredibilmente ricca. I colpi interni non fanno eccezione e puoi trovare tutti i casi di test inner_hits nella classe InnerHitsTests.java.

Così la vostra query di cui sopra possono essere creati in questo modo:

// build the geo_distance filter 
    GeoDistanceFilterBuilder geo = FilterBuilders 
      .geoDistanceFilter("locations.address.geoLocation") 
      .distance("20km") 
      .lat(38.07061) 
      .lon(-76.77514); 

    // build the nested filter and add inner_hits 
    NestedFilterBuilder nested = FilterBuilders 
      .nestedFilter("locations", geo) 
      .innerHit(new QueryInnerHitBuilder()); <--- this is what you're looking for 

    // wrap it all inside a filtered query 
    FilteredQueryBuilder query = QueryBuilders 
      .filteredQuery(QueryBuilders.matchAllQuery(), nested); 
Problemi correlati