问题描述
我目前第一次与我的团队一起在我们的 Java 项目中使用 elasticsearch。 我可以进行搜索查询,现在我想查找给定位置周围的地理点。
我的目标是获得 n 个更近的元素,我的想法是按距离对点进行排序并取第 n 个结果。为此,我将索引字段“位置”定义为地理点类型:
Map<String,Object> mapping = new HashMap<>();
mapping.put("location","geo_point");
elasticSearchService.createIndex(ElasticSearchConstants.INDEX_POINT,mapping);
这似乎有效,因为它消除了我之前在字段映射中遇到的错误。此外,查询元素为我提供了字段位置的地理点值,这是另一个好消息。
当我开始查询以进行排序时,我使用此构建器创建排序:
GeodistanceSortBuilder geodistanceSort = SortBuilders.geodistanceSort("location",geoPoint)
.unit(distanceUnit.KILOMETERS).order(SortOrder.DESC)
.geodistance(Geodistance.PLANE);
使用查询“matchAllQuery”,因为我稍后会进行更多过滤。
builder = QueryBuilders.matchAllQuery();
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(builder);
searchSourceBuilder.sort(geodistanceSort);
(如果需要,我有 API 的所有精确调用,但除此之外我不运行任何特殊的排序、过滤器或其他东西)
遗憾的是,这个问题从 API 本身引发了一个关于类型转换的错误:
org.elasticsearch.ElasticsearchException: Elasticsearch exception [type=class_cast_exception,reason=class org.elasticsearch.index.fielddata.plain.sortednumericIndexFieldData cannot be cast to class org.elasticsearch.index.fielddata.IndexGeoPointFieldData (org.elasticsearch.index.fielddata.plain.sortednumericIndexFieldData and org.elasticsearch.index.fielddata.IndexGeoPointFieldData are in unnamed module of loader 'app')]
at org.elasticsearch.ElasticsearchException.innerFromXContent(ElasticsearchException.java:496) ~[elasticsearch-7.9.3.jar!/:7.9.3]
at org.elasticsearch.ElasticsearchException.fromXContent(ElasticsearchException.java:407) ~[elasticsearch-7.9.3.jar!/:7.9.3]
at org.elasticsearch.ElasticsearchException.innerFromXContent(ElasticsearchException.java:437) ~[elasticsearch-7.9.3.jar!/:7.9.3]
at org.elasticsearch.ElasticsearchException.fromXContent(ElasticsearchException.java:407) ~[elasticsearch-7.9.3.jar!/:7.9.3]
at org.elasticsearch.ElasticsearchException.innerFromXContent(ElasticsearchException.java:437) ~[elasticsearch-7.9.3.jar!/:7.9.3]
at org.elasticsearch.ElasticsearchException.failureFromXContent(ElasticsearchException.java:603) ~[elasticsearch-7.9.3.jar!/:7.9.3]
at org.elasticsearch.rest.BytesRestResponse.errorFromXContent(BytesRestResponse.java:179) ~[elasticsearch-7.9.3.jar!/:7.9.3]
at org.elasticsearch.client.RestHighLevelClient.parseEntity(RestHighLevelClient.java:1892) ~[elasticsearch-rest-high-level-client-7.9.3.jar!/:7.9.3]
at org.elasticsearch.client.RestHighLevelClient.parseResponseException(RestHighLevelClient.java:1869) ~[elasticsearch-rest-high-level-client-7.9.3.jar!/:7.9.3]
at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1626) ~[elasticsearch-rest-high-level-client-7.9.3.jar!/:7.9.3]
at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1583) ~[elasticsearch-rest-high-level-client-7.9.3.jar!/:7.9.3]
at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1553) ~[elasticsearch-rest-high-level-client-7.9.3.jar!/:7.9.3]
at org.elasticsearch.client.RestHighLevelClient.search(RestHighLevelClient.java:1069) ~[elasticsearch-rest-high-level-client-7.9.3.jar!/:7.9.3]
at fr.henoo.server.services.research.ElasticSearchService.makeCustomQuery(ElasticSearchService.java:97) ~[classes!/:0.2.0]
(下面的栈是java服务器栈,不是ElasticSearch栈)
我完全不知道,因为我检查的示例和代码似乎都验证了查询的构建。我不太了解源代码,无法获得实际错误,因此任何类型的突出显示都很好。
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)