2015-09-28 22 views
5

Java APIを使用してelasticsearchで内部ヒットを実装しようとしていますが、他の人が使用しているドキュメントや例はほとんど見つかりません。私は次のように動作します私のJSONの検索を持っている:Java APIを使用したElasticsearchインヒット

{ 
    "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": {} 
     } 
     } 
    } 
    } 
} 

私はelasticsearchライブラリにInnerHitsBuilderとaddInnerHit方法を参照してくださいが、私はそれらを使用する方法についてのドキュメントを見つけることができません。

答えて

7

各機能がテストされているESソースコードにはたくさんのテストケースがあるため、ESコードの閲覧は非常に豊富な情報源です。内部ヒットも例外ではなく、InnerHitsTests.javaクラスのすべてのinner_hitsテストケースを見つけることができます。

したがって、上記のクエリは次のように作成することができます。

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