Elasticsearch在java api中的内部匹配

问题描述:

我想用elasticsearch实现内部匹配使用Java API,但我找不到任何文档或其他人正在使用的示例。我有我的JSON搜索的作品如下:Elasticsearch在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": {} 
     } 
     } 
    } 
    } 
} 

我看到elasticsearch库的InnerHitsBuilder和addInnerHit方法,但我无法找到如何使用它们的文档。

请注意,在测试每个功能的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);