7

Java APIを使用してelasticsearchで内部ヒットを実装しようとしていますが、それに関するドキュメントや他の人が使用している例を見つけることができません. 次のように機能する JSON 検索があります。

{
  "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 メソッドがありますが、それらの使用方法に関するドキュメントが見つかりません。

4

1 に答える 1

9

ES ソース コードには、各機能がテストされている多数のテスト ケースがあることに注意してください。そのため、ES コードを閲覧することは、信じられないほど豊富な情報源となります。内部ヒットも例外ではなく、クラスinner_hits内のすべてのテスト ケースを見つけることができます。InnerHitsTests.java

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

    // 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);
于 2015-09-30T06:51:29.493 に答える