提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
最近在使用RestHighLevelClient测试后端数据时,遇到如下一个报错:
ElasticsearchStatusException[Elasticsearch exception [type=parse_exception, reason=numeric value expected]
]
at org.elasticsearch.rest.BytesRestResponse.errorFromXContent(BytesRestResponse.java:176)
at org.elasticsearch.client.RestHighLevelClient.parseEntity(RestHighLevelClient.java:1933)
...
Suppressed: org.elasticsearch.client.ResponseException: method [POST], host [http://192.***.***.***:9200], URI [/exp_store_location/_search?typed_keys=true&max_concurrent_shard_requests=5&ignore_unavailable=false&expand_wildcards=open&allow_no_indices=true&ignore_throttled=true&search_type=query_then_fetch&batched_reduce_size=512&ccs_minimize_roundtrips=true], status line [HTTP/1.1 400 Bad Request]
{"error":{"root_cause":[{"type":"parse_exception","reason":"numeric value expected"}],"type":"parse_exception","reason":"numeric value expected"},"status":400}
at org.elasticsearch.client.RestClient.convertResponse(RestClient.java:326)
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:296)
at org.elasticsearch.client.RestClient.performRequest(RestClient.java:270)
at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1654)
... 71 more
一、我的测试代码:
// 根据坐标排序
@Test
void testByLocation() throws Exception {
SearchRequest request = new SearchRequest("exp_store_location");
String location = "22.910906957435557,113.87965738641294";
GeoDistanceQueryBuilder geoDistanceQuery = QueryBuilders.geoDistanceQuery("location"); // 设置查询字段
//geoDistanceQuery.point(new GeoPoint(location)); // 设置查询中心坐标
geoDistanceQuery.distance("15",DistanceUnit.KILOMETERS); // 设置查询半径
request.source().query(geoDistanceQuery);
/*request.source().query(QueryBuilders.geoDistanceQuery("location").point(new GeoPoint(location)).distance("15",DistanceUnit.KILOMETERS)).sort(
SortBuilders
.geoDistanceSort("location",new GeoPoint(location))
.order(SortOrder.ASC)
.unit(DistanceUnit.KILOMETERS)
).sort(SortBuilders
.fieldSort("averagePrice")
.order(SortOrder.ASC)
);*/
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
}
二、问题所在
问题出在我没有给geoDistanceQuery
设置中心坐标文章来源:https://www.toymoban.com/news/detail-593140.html
GeoDistanceQueryBuilder geoDistanceQuery = QueryBuilders.geoDistanceQuery("location"); // 设置搜索字段
geoDistanceQuery.point(new GeoPoint(location)); // 设置中心坐标
geoDistanceQuery.distance("15",DistanceUnit.KILOMETERS); // 设置搜索距离范围
设置中心坐标后问题得到解决。
以下是elastic客户端查询索引的代码文章来源地址https://www.toymoban.com/news/detail-593140.html
GET /exp_store_location/_search
{
"query": {
"geo_distance": {
"distance": "150km",
"location": "22.910906957435557,113.87965738641294"
}
}
, "sort": [
{
"_geo_distance": {
"location": "22.910906957435557,113.87965738641294",
"order": "asc",
"unit": "km"
},
"averagePrice": {
"order": "asc"
}
}
]
}
最后分享一下我自己的范围测试查询代码
// 根据坐标排序
@Test
void testByLocation() throws Exception {
SearchRequest request = new SearchRequest("exp_store_location");
String location = "22.910906957435557,113.87965738641294";
/*GeoDistanceQueryBuilder geoDistanceQuery = QueryBuilders.geoDistanceQuery("location"); // 设置查询字段
geoDistanceQuery.point(new GeoPoint(location)); // 设置查询中心坐标
geoDistanceQuery.distance("15",DistanceUnit.KILOMETERS); // 设置查询半径
request.source().query(geoDistanceQuery);*/
request.source()
// 查询条件
.query(QueryBuilders.geoDistanceQuery("location")
.point(new GeoPoint(location))
.distance("15",DistanceUnit.KILOMETERS)
)
// 对结果的排序方式
.sort(SortBuilders
.geoDistanceSort("location",new GeoPoint(location))
.order(SortOrder.ASC)
.unit(DistanceUnit.KILOMETERS)
)
.sort(SortBuilders
.fieldSort("averagePrice")
.order(SortOrder.ASC)
);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
System.out.println(response.toString());
}
到了这里,关于elasticsearch 7.12.1报错处理:ElasticsearchStatusException[Elasticsearch exception [type=parse_exception]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!