【问题标题】:How to map the resultset of elasticsearch query with Java High Level Rest Client API?如何使用 Java High Level Rest Client API 映射 elasticsearch 查询的结果集?
【发布时间】:2019-12-24 11:58:26
【问题描述】:

我正在使用 ES 7.2。下面是来自 ES 的示例查询结果。它有两个字段 STATUS 和 SERVICE_ID:

{{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 106,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "myindex",
        "_type" : "_doc",
        "_id" : "ENXDrWsBF759w7WDGxK4",
        "_score" : 1.0,
        "_source" : {
          "STATUS" : "10",
          "SERVICE_ID" : "916"
        }
      },
      {
        "_index" : "myindex",
        "_type" : "_doc",
        "_id" : "EdXDrWsBF759w7WDGxK4",
        "_score" : 1.0,
        "_source" : {
          "STATUS" : "10",
          "SERVICE_ID" : "916"
        }
      }
    ]
  }
}

我想将它映射到下面的 Java Bean“MyBean”:

public class MyBean {

  String SERVICE_ID;
  String STATUS;

public String getSERVICE_ID() {
    return SERVICE_ID;
}
public void setSERVICE_ID(String sERVICE_ID) {
    SERVICE_ID = sERVICE_ID;
}
public String getSTATUS() {
    return STATUS;
}
public void setSTATUS(String sTATUS) {
    STATUS = sTATUS;
}
}

我使用 ObjectMapper 的 jackson 库尝试了下面的映射,但它有以下异常:

        try {
                    SearchResponse searchResponse1 = client.search(searchRequest, RequestOptions.DEFAULT);
            ObjectMapper mapper = new ObjectMapper();
            java.util.List<MyBean> lst = new ArrayList<MyBean>();
            for(SearchHit hit : searchResponse1.getHits().getHits()) {
//here below, i have the exception
                MyBean s = mapper.readValue(hit.getSourceAsString(), MyBean.class);
                lst.add(s);
            } 

以下是例外:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "STATUS" (class MyBean), not marked as ignorable (2 known properties: "status",  "service_ID")
 at [Source: (String)"{"STATUS":"11"}"; line: 1, column: 12] (through reference chain: MyBean["STATUS"])

你有什么想法吗?

【问题讨论】:

    标签: java json rest elasticsearch jackson-databind


    【解决方案1】:

    这个怎么样?

    public class MyBean {
        private String status;
        private String name;
     
        @JsonProperty("SERVICE_ID")
        public void setServiceId(String serviceId) {
            this.serviceId = serviceId;
        }
     
        @JsonProperty("SERVICE_ID")
        public String getServiceId() {
            return serviceId;
        }
    
        @JsonProperty("STATUS")
        public void setStatus(String status) {
            this.status = status;
        }
     
        @JsonProperty("STATUS")
        public String getStatus() {
            return status;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 2021-11-05
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      相关资源
      最近更新 更多