2015-09-28 12 views
5

Ich versuche, innere Treffer mit elasticsearch mit Java-API zu implementieren, aber ich kann nicht viel von der Dokumentation finden oder Beispiele, die andere Leute verwenden. Ich habe meine JSON-Suche, die funktioniert wie folgt:Elasticsearch innere Treffer 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": {} 
     } 
     } 
    } 
    } 
} 

Ich sehe eine InnerHitsBuilder und addInnerHit Methoden in der Elasticsearch Bibliothek, aber ich kann die Dokumentation auf nicht finden, wie sie zu benutzen.

Antwort

7

Beachten Sie, dass es im ES-Quellcode viele Testfälle gibt, in denen jedes Feature getestet wird. Daher ist das Durchsuchen des ES-Codes eine unglaublich reichhaltige Informationsquelle. Inner Hits machen keine Ausnahme und Sie können alle inner_hits Testfälle in der InnerHitsTests.java Klasse finden.

// 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); 
:

So oben Ihre Abfrage kann wie folgt erstellt werden

Verwandte Themen