使用 Java ElasticSearch 高级客户端的问题:无法将 SortedNumericIndexFieldData 强制转换为类 IndexGeoPointFieldData

问题描述

我目前第一次与我的团队一起在我们的 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...