有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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堆栈)

我完全不明白,因为我检查的示例和代码似乎都验证了查询的构建。我不太了解源代码,无法得到实际的错误,所以任何类型的高亮显示都很好

谢谢


共 (0) 个答案