使用JestClient获取Double值而不是Integer从elasticsearch检索文档 .
Index mapping -
"makeId": {
"type": "integer"
},
"makeName": {
"type": "keyword"
},
"yearId": {
"type": "integer"
}
我使用JestClient(在java中)获取字段值,我期望makeId和yearId值为整数,但值返回为Double,
Jest maven Depandency -
<dependency>
<groupId>io.searchbox</groupId>
<artifactId>jest</artifactId>
<version>2.0.0</version>
</dependency>
Java代码 -
String[] reqFields = { "makeName","makeId","yearId" };
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolquery = QueryBuilders.boolQuery();
boolquery.must(QueryBuilders.matchQuery("yearId", yearId));
searchSourceBuilder.query(boolquery).fetchSource(reqFields, null).size(9000);
Search.Builder searchBuilder = new Search.Builder(searchSourceBuilder.toString()).addIndex(indexName).addType(indexType);
SearchResult result = jestClient.execute(searchBuilder.build());
List<Hit<Map, Void>> hits = result.getHits(Map.class);
在此行之后,SearchResult将Source对象作为整数值(正如我所期待的那样)
SearchResult result = jestClient.execute(searchBuilder.build());
响应:-
{“take”:29,“timed_out”:false,“_ shards”:{“total”:5,“success”:5,“failed”:0},“hits”:{“total”:1466,“ MAX_SCORE “:1.0,” 命中 “:[{” _索引 “:” 车辆”, “类型”: “vehicle_dev”, “ ID”: “836”, “_分数”:1.0, “_源”:{ “makeId”: 2, “makeName”: “别克”, “yearId”:2012}},{ “_索引”: “车辆”, “类型”: “vehicle_dev”, “ ID”: “1915”, “_分数”:1.0,” _source “:{” makeId “:5”,makeName “:” 雪佛兰”, “yearId”:2012}},{ “_索引”: “车辆”, “类型”: “vehicle_dev”, “ ID”: “2511” , “_分数”:1.0, “_源”:{ “makeId”:5 “makeName”: “雪佛兰”, “yearId”:2012}},{ “_索引”: “车辆”, “类型”: “vehicle_dev” , “ ID”: “2324”, “_分数”:1.0, “_源”:{ “makeId”:5 “makeName”: “雪佛兰”, “yearId”:2012}}
(预期)
但是当下一行执行时 -
List<Hit<Map, Void>> hits = result.getHits(Map.class);
响应:-
{makeId = 2.0,makeName = BUICK,yearId = 2012.0,es_metadata_id = 836}
意外
值从2变为Double i..e 2.0 .
1 回答
@shubam
使用索引字段创建自己的模型(POJO)类并提供适当的类型
例
然后使用这个类
这将为您提供定义POJO类型的结果