由于缺少与GeoBoundingBox查询的兼容性,我被迫使用新的Elasticsearch 8 Java客户端。根据文档,当使用搜索时,现在必须指定一个将用于去沙漠化的文档类。在旧的搜索中,此时返回一个简单的Map,其中Key(String)Value(Any)。
如何恢复这种行为?我们使用跨多个实体的搜索,所以我们不能将特定类型(如“Product”)应用到搜索结果中。除了JsonNode/ObjectNode之外,我还尝试跟随Jackson并使用类似这样的东西:
val searchResponse = elasticsearchClient.search(searchRequest, object : TypeReference<Map<String, Any?>>(){}::class.java)
但是这样我得到以下错误消息:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "name" (class com.test.test.elasticsearch.QueryService$geoBoundingBoxQuery$searchResponsey$1), not marked as ignorable (0 known properties: ])
如何从旧的Java客户端恢复行为?
1条答案
按热度按时间omvjsjqw1#
我最终得到了以下解决方案:
JsonNode
来自jackson-databind(如果您想使用新的Elasticsearch客户端,无论如何都需要它)在第二步中,使用TypeReference收集并相应地转换各个json节点。因此,最后我有一个map列表,与之前相同。