Elasticsearch 内部命中率 java api
Elasticsearch inner hits in java api
我正在尝试使用 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 方法,但我找不到关于如何使用它们的文档。
请注意,在测试每个功能的 ES 源代码中有大量测试用例,因此浏览 ES 代码是一个非常丰富的信息来源。内部命中也不例外,您可以在 InnerHitsTests.java
class.
中找到所有 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);
我正在尝试使用 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 方法,但我找不到关于如何使用它们的文档。
请注意,在测试每个功能的 ES 源代码中有大量测试用例,因此浏览 ES 代码是一个非常丰富的信息来源。内部命中也不例外,您可以在 InnerHitsTests.java
class.
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);