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