有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在ElasticSearch中将SearchHit转换为Java对象

我试图从ES查询中检索数据,但我对如何将每次检索到的数据转换为Java对象感到困惑。 到目前为止,我可以使用Gson以JSON格式获得每个命中,但我认为从命中转换为JSON然后再转换为Java对象是无用的

我目前的代码是:

TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
            .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
    Settings settings = Settings.builder()
            .put("cluster.name", "elasticsearch")
            .put("path.home", "/Users/user/Apps/elasticsearch-5.4.1")
            .build();

    QueryBuilder qb = termQuery("price", 12);
    SearchResponse response = client.prepareSearch("kal").setTypes("products")
            .setSearchType(SearchType.DEFAULT)
            .setQuery(qb)
            .get();

    SearchHit[] results = response.getHits().getHits();
    for (SearchHit hit : results) {
        String sourceAsString = hit.getSourceAsString();
        Map<String, SearchHitField> responseFields = hit.getFields();
        if (sourceAsString != null) {
            Gson gson = new GsonBuilder().setDateFormat(sourceAsString)
                    .create();
        }
    }

共 (3) 个答案

  1. # 1 楼答案

        I am working with Elasticsearch version 7.4.2
    
        SearchHit[] searchHit = response.getHits().getHits();
                for (SearchHit hit : searchHit) {
                    String jsonString=hit.getSourceAsString();
                    TempClass tmpCl=(TempClass )JSONToObject.parser(jsonString, TempClass .class);
                    System.out.println(tmpCl.toString());
                }
    
    
        // JSONToObject class
        private static Object dc;
        public static Object parser(String file, Class<?> cls) {
            try {
                    Gson gson = new Gson();
                    dc = gson.fromJson(file, cls);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return dc;
        }
    
  2. # 2 楼答案

    一行

    YourObject yourObject = new com.fasterxml.jackson.databind.ObjectMapper().convertValue(searchHit.getSourceAsMap(), YourObjectClass.class);
    
  3. # 3 楼答案

    我实现了这个解决方案,但我不确定这是否是正确的方法

    SearchHit[] results = response.getHits().getHits();
        for (SearchHit hit : results) {
            String sourceAsString = hit.getSourceAsString();
            Map<String, SearchHitField> responseFields = hit.getFields();
            SearchHitField field = responseFields.get("product_id");
            Map map = hit.getSource();
            System.out.println(map.toString());
        }