首页 文章

使用JestClient获取Double值而不是Integer从elasticsearch检索文档

提问于
浏览
0

使用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 回答

  • 1

    @shubam

    使用索引字段创建自己的模型(POJO)类并提供适当的类型

    public IndexModel
    {
    private integer makeId;
    private String makeName;
    private integer yearId;
    
    //Generate the setter and getters
    

    然后使用这个类

    List<IndexModel> IndexModelList = result.getSourceAsObjectList(IndexModel.class);
                    for( IndexModel indexModel: IndexModelList ){
                        indexModel.getyearId();
    

    这将为您提供定义POJO类型的结果

相关问题