gpt4 book ai didi

java - Elasticsearch 返回 Integer 但我的映射中的字段明确是 Long

转载 作者:行者123 更新时间:2023-11-30 06:45:18 25 4
gpt4 key购买 nike

我正在使用 Elasticsearch v5.2.2,当通过 Java API 进行匹配所有查询时,当我从返回的命中中循环遍历 Map 源对象时,映射为 Long 的 ID 字段将作为 Integer 返回。因此,我的代码需要 Long 并将返回的 Object 值转换为 long,但会抛出 ClassCastException。知道为什么 Elasticsearch 忽略我的映射并返回一个整数吗?

我可以确认,使用 CURL 和其余 API,我看到我的 ID 字段映射为 Long 类型。

映射:

    {
"reference" : {
"mappings" : {
"city" : {
"_all" : {
"enabled" : false
},
"properties" : {
"id" : {
"type" : "long"
},
"location" : {
"type" : "geo_point"
},
"type" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
}
}

返回 Integer 而不是 Long 的代码:

      public List<City> findCityByType(String value) {
SearchResponse response = client.prepareSearch("reference").setTypes("city")
.setQuery(QueryBuilders.matchPhrasePrefixQuery("type", value)).get();
SearchHits searchHits = response.getHits();
SearchHit[] hits = searchHits.getHits();
List<City> cities = new ArrayList<>();
for (SearchHit hit : hits) {
City city = new City();
Map<String, Object> source = hit.getSource();

//Have to cast to Integer, not Long. Why does ES return an Integer?
postcode.setId((Integer)source.get("id"));
postcode.setType((String) source.get("type"));
}
return cities;
}

谢谢

最佳答案

如果长字段包含较小的值(例如 1),则 java api 返回整数。

关于java - Elasticsearch 返回 Integer 但我的映射中的字段明确是 Long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43782224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com