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

这篇具有很好参考价值的文章主要介绍了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、自动解析:文章来源地址https://www.toymoban.com/news/detail-509179.html

   /**
     * 自动解析
     * @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());
        
    }

到了这里,关于Elasticsearch系列(八)----ES生成JSON与解析JSON的方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是Java中的JSON解析和生成?

    首先,我们来解释一下JSON是什么。简单来说,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于解析和生成。在Java中,我们有很多种方式来实现JSON解析和生成。接下来,我们来看一下代码示例吧! 首先,我们来看一下JSON解析。假设我

    2024年02月15日
    浏览(43)
  • 爬虫系列实战:使用json解析天气数据

    大家好,爬虫是一项非常抢手的技能,收集、分析和清洗数据是数据科学项目中最重要的部分,本文介绍使用json解析气象局天气数据。 在官网上获取天气数据信息,可以定义当前查询的位置,提取时间、温度、湿度、气压、风速等信息,并导入requests、matplotlib这些需要用到

    2024年01月18日
    浏览(39)
  • Hive 解析 JSON 字符串数据的实现方式

    在 Hive 中提供了直接解析 JSON 字符串数据的方法 get_json_object(json_txt, path) ,该方法参数解析如下: json_txt :顾名思义,就是 JSON 字符串; path :指的是匹配 JSON 字符串的格式,通过固定的语法获取 JSON 字符串中的内容。 常用的 path 参数匹配符号有四个,分别是: $ :表示获

    2024年02月05日
    浏览(51)
  • Elasticsearch 系列(六)- ES数据同步和ES集群

    本章将和大家分享ES的数据同步方案和ES集群相关知识。废话不多说,下面我们直接进入主题。 1、数据同步问题 Elasticsearch中的酒店数据来自于mysql数据库,因此mysql数据发生改变时,Elasticsearch也必须跟着改变,这个就是Elasticsearch与mysql之间的数据同步。 在微服务中,负责酒

    2024年04月28日
    浏览(83)
  • elasticSearch集群 springboot集成es 完全解析

    #编写compose.yml配置文件 #每个节点都创建一个elasticsearch.yml文件 用到的命令: systemctl start docker docker-compose up es和kibana版本必须一样 environment:配置容器内的环境变量 networks:创建一个名为elastic的局域网,让各节点以及kibana,es-head相互联系 network.host: 0.0.0.0:意为监听一切地址,可

    2024年02月03日
    浏览(45)
  • Logstash:如何使用 Logstash 解析并摄入 JSON 数据到 Elasticsearch

    在我之前的文章 “Logstash:Data 转换,分析,提取,丰富及核心操作” 有涉及到这个话题。今天我想使用一个具体的例子来更深入地展示。   我们先来把如下的数据拷贝下来,并保存到一个叫做 sample.json 的文件中。我们可以把这个文件置于 Logstash 的安装根目录下。 sample.j

    2024年02月02日
    浏览(45)
  • 使用HTTP方式发送请求及json数据的接收和解析

    目录 需求 请求端 1,添加依赖 2,请求对象 3,请求工具类 4,请求测试(事先开启接收端的服务) 接收端 数据请求模拟 本项目需要通过向对端第三方项目发送一个http的post类型的请求,并且指定了一些请求字段,数据传输采用了json,对请求头没有其他特殊要求,所以这里写

    2024年01月17日
    浏览(84)
  • ElasticSearch系列 - SpringBoot整合ES:ElasticSearch分析器

    1. ElasticSearch match 文本搜索的过程? Elasticsearch 的 match 查询是一种基于文本匹配的查询方式,它的搜索过程如下: ① 将查询字符串分词:Elasticsearch 会将查询字符串分成一个个词项(term),并去除停用词(如“的”、“是”等常用词汇)和标点符号等无意义的字符。 ② 构建

    2023年04月18日
    浏览(124)
  • Elasticsearch 系列(二)- ES的基本概念

    本章将和大家分享 Elasticsearch 的一些基本概念。话不多说,下面我们直接进入主题。 Lucene是Apache的开源搜索引擎类库,提供了搜索引擎的核心API。 1、Lucene的优势:易扩展、高性能(基于倒排索引) 2、Lucene的缺点:只限于Java语言开发、学习曲线陡峭、不支持水平扩展 Elast

    2024年02月05日
    浏览(39)
  • 文档存储Elasticsearch系列--1 ES介绍

    前言:Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,支持结构化文档数据的分布式存储,并提供准实时的查询,全文检索,数据聚合; 1 为什么要使用ES: ES 本身存在哪些特性使得我们放弃传统关系型数据库,ES的特点: (1)ES支持PB级别(100万G) 数据

    2024年02月13日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包