Elasticsearch系列(八)----ES生成JSON与解析JSON的方式

一、生成JSON

四种方式如下,官网文档:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-index.html:

**1.1手写方式生成
**

String json = "{" +
	""user":"fendo"," +
	""postDate":"2013-01-30"," +
	""message":"Hell word"" +
"}";

**1.2使用集合
**

集合是key:value数据类型,可以代表json结构.

Map<String, Object> json = new HashMap<String, Object>();
json.put("user","kimchy");
json.put("postDate","2013-01-30");
json.put("message","trying out Elasticsearch");

**1.3使用JACKSON序列化
**

ElasticSearch已经使用了jackson,可以直接使用它把javabean转为json.

// instance a json mapper
ObjectMapper mapper = new ObjectMapper(); // create once, reuse

// generate json
byte[] json = mapper.writeValueAsBytes(yourbeaninstance);

1.4使用ElasticSearch 帮助类

XContentBuilder builder = jsonBuilder()
	.startObject()
		.field("user", "kimchy")
		.field("postDate", new Date())
		.field("message", "trying out Elasticsearch")
	.endObject()

 String json = builder.string();

完整示例:

package com.fendo.temp;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class CreateIndex {

	private TransportClient client;
	
	@Before
	public void getClient() throws Exception{
        //设置集群名称
        Settings settings = Settings.builder().put("cluster.name", "my-application").build();// 集群名
        //创建client
        client  = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
	}
	
	/**
	 * 手动生成JSON
	 */
	@Test
	public void CreateJSON(){
		
		String json = "{" +
		        ""user":"fendo"," +
		        ""postDate":"2013-01-30"," +
		        ""message":"Hell word"" +
		    "}";
		
		IndexResponse response = client.prepareIndex("fendo", "fendodate")
		        .setSource(json)
		        .get();
		System.out.println(response.getResult());
		
	}
	
	
	/**
	 * 使用集合
	 */
	@Test
	public void CreateList(){
		
		Map<String, Object> json = new HashMap<String, Object>();
		json.put("user","kimchy");
		json.put("postDate","2013-01-30");
		json.put("message","trying out Elasticsearch");
		
		IndexResponse response = client.prepareIndex("fendo", "fendodate")
		        .setSource(json)
		        .get();
		System.out.println(response.getResult());
		
	}
	
	/**
	 * 使用JACKSON序列化
	 * @throws Exception
	 */
	@Test
	public void CreateJACKSON() throws Exception{
		
		CsdnBlog csdn=new CsdnBlog();
		csdn.setAuthor("fendo");
		csdn.setContent("这是JAVA书籍");
		csdn.setTag("C");
		csdn.setView("100");
		csdn.setTitile("编程");
		csdn.setDate(new Date().toString());
		
		// instance a json mapper
		ObjectMapper mapper = new ObjectMapper(); // create once, reuse

		// generate json
		byte[] json = mapper.writeValueAsBytes(csdn);
		
		IndexResponse response = client.prepareIndex("fendo", "fendodate")
		        .setSource(json)
		        .get();
		System.out.println(response.getResult());
	}
	
	/**
	 * 使用ElasticSearch 帮助类
	 * @throws IOException 
	 */
	@Test
	public void CreateXContentBuilder() throws IOException{
		
		XContentBuilder builder = XContentFactory.jsonBuilder()
			    .startObject()
			        .field("user", "ccse")
			        .field("postDate", new Date())
			        .field("message", "this is Elasticsearch")
			    .endObject();
		
        IndexResponse response = client.prepareIndex("fendo", "fendodata").setSource(builder).get();
        System.out.println("创建成功!");
        
		
	}
	
}

二、解析JSON

Jest对获取的JSON数据,有两种解析方式

1、手动解析

   /**
     * 手动解析
     * @throws IOException 
     */
    @Test
    public void ManualOperation() throws IOException{
    	
    	int pageNumber=1;
    	int pageSize=10;
    	
    	SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    	searchSourceBuilder.query(QueryBuilders.queryStringQuery("JAVA"));
    	searchSourceBuilder.from((pageNumber - 1) * pageSize);//设置起始页
        searchSourceBuilder.size(pageSize);//设置页大小
        Search search = new Search.Builder(searchSourceBuilder.toString())
                .addIndex(indexName)// 索引名称
                .build();
        SearchResult result = jestClient.execute(search);
        
        
        
        // 手动解析
        JsonObject jsonObject = result.getJsonObject();
        JsonObject hitsobject = jsonObject.getAsJsonObject("hits");
        long took = jsonObject.get("took").getAsLong();
        long total = hitsobject.get("total").getAsLong();
        JsonArray jsonArray = hitsobject.getAsJsonArray("hits");
        
        System.out.println("took:"+took+"  "+"total:"+total);
        
        List<CsdnBlog> csdnBlogs=new ArrayList<CsdnBlog>(); 
        
        for (int i = 0; i < jsonArray.size(); i++) {
            JsonObject jsonHitsObject = jsonArray.get(i).getAsJsonObject();

            // 获取返回字段
            JsonObject sourceObject = jsonHitsObject.get("_source").getAsJsonObject();

            // 封装Article对象
            CsdnBlog article = new CsdnBlog();
            article.setTitile(sourceObject.get("titile").getAsString());
            article.setContent(sourceObject.get("content").getAsString());
            article.setAuthor(sourceObject.get("author").getAsString());
            article.setDate(sourceObject.get("date").getAsString());
            article.setTag(sourceObject.get("tag").getAsString());
            article.setView(sourceObject.get("view").getAsString());
            csdnBlogs.add(article);
            
      }
       
      System.out.println(csdnBlogs.size());
        
    }

2、自动解析:

   /**
     * 自动解析
     * @throws Exception
     */
    @Test
    public void Auto() throws Exception{
    	
    	
    	int pageNumber=1;
    	int pageSize=10;
    	
    	SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    	searchSourceBuilder.query(QueryBuilders.queryStringQuery("JAVA"));
    	searchSourceBuilder.from((pageNumber - 1) * pageSize);//设置起始页
        searchSourceBuilder.size(pageSize);//设置页大小
        Search search = new Search.Builder(searchSourceBuilder.toString())
                .addIndex(indexName)// 索引名称
                .build();
        SearchResult result = jestClient.execute(search);
        
        
        // 自动解析
        JsonObject jsonObject = result.getJsonObject();
        JsonObject hitsobject = jsonObject.getAsJsonObject("hits");
        long took = jsonObject.get("took").getAsLong();
        long total = hitsobject.get("total").getAsLong();
        
        System.out.println("took:"+took+"  "+"total:"+total);

        
        List<SearchResult.Hit<CsdnBlog, Void>> hits = result.getHits(CsdnBlog.class);
        
        List<CsdnBlog> csdnBlogs=new ArrayList<CsdnBlog>(); 
        for (SearchResult.Hit<CsdnBlog, Void> hit : hits) {
        	
        	CsdnBlog source = hit.source;
        	csdnBlogs.add(source);
        	
        }
        System.out.println(csdnBlogs.size());
        
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
elasticsearch-cli是一个命令行工具,用于与Elasticsearch进行交互和管理。它提供了一系列命令,可以在命令行中执行各种操作,如索引数据、搜索数据、管理索引和节点等。 使用elasticsearch-cli可以方便地执行各种操作。首先,我们可以使用命令创建索引并定义其映射。索引是用于存储和组织数据的容器,映射定义了索引中的各个字段的类型和属性。通过elasticsearch-cli,我们可以创建与应用程序需要的数据结构相匹配的索引,并为字段定义适当的类型和设置。 除了创建索引,elasticsearch-cli还提供了一些命令,可以添加、更新和删除文档。文档是索引中的最小数据单位,可以是一条记录、一篇文章或任何其他可以JSON表示的数据。通过elasticsearch-cli,我们可以使用命令将文档添加到索引中,进行全文搜索、聚合和过滤等操作。 此外,elasticsearch-cli还提供了一些管理命令,可以监视和管理Elasticsearch集群中的节点。我们可以使用它来查看节点的状态、分配和重新分配分片、进行集群健康检查等。这些管理命令可以帮助我们更好地了解集群的状态和性能,并采取适当的措施来优化和管理集群。 总之,elasticsearch-cli是一个强大的命令行工具,可用于与Elasticsearch进行交互和管理。它提供了一系列命令,可用于创建索引、添加和搜索文档以及管理集群节点。通过使用elasticsearch-cli,我们可以更方便地进行Elasticsearch的操作和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值