IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Elasticsearch之使用RestClient实现_sql查询 -> 正文阅读

[大数据]Elasticsearch之使用RestClient实现_sql查询

版本:elasticsearch 7.13.4

1. 声明

当前内容主要为使用RestClient以及使用sql方式进行查询操作,主要参考官方文档

主要使用_sql方式进行查询

2. 主要demo

public static void main(String[] args) throws IOException {
		RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200, "http")).build();
		// Sniffer 默认为5分钟一次更新节点信息(主要为控制节点,判断节点是否可以访问)
		// sniffer的主要作用就是按照指定的时间间隔方式修改restClient的setNodes方法
		Sniffer sniffer = Sniffer.builder(restClient).build();
		// 手动设置为1分钟更新一次节点
		// Sniffer.builder(restClient).setSniffIntervalMillis(60*1000);
		
		try {
			// 使用sql方式查询
			selectDataUsingNativeSql(restClient);	
		} finally {
			// 注意关闭顺序
			sniffer.close();
			restClient.close();
		}

	}
	
	
	/**
	 * 
	 * @author hy
	 * @createTime 2021-08-01 12:38:57
	 * @description 使用原生的sql查询操作
	 * @param restClient
	 * @throws IOException
	 *
	 */
	private static void selectDataUsingNativeSql(RestClient restClient) throws IOException {
		// Request request = new Request("GET", "/_sql?format=txt"); // 默认按照视图的方式显示
		/*
		   bookName    |     count     |      id       |     price     |  publishDate  
		   ---------------+---------------+---------------+---------------+---------------
		   null           |null           |2              |66.6           |null    
		  */   
		Request request = new Request("GET", "/_sql");// 默认format就是json
		// {"columns":[{"name":"bookName","type":"text"},{"name":"count","type":"long"},{"name":"id","type":"long"},{"name":"price","type":"float"},{"name":"publishDate","type":"text"}],"rows":[[null,null,2,66.6,null]]}
		// request.setJsonEntity("{\"query\": \"SELECT * FROM book WHERE bookName is null and price>5\"}");
		// 但是不可以在query中使用limit方式实现分页操作入:limit 0,5
		
		// 不支持分页查询操作,只能控制当前查询的数量,具有缺点(官方显示有很多缺陷)
		request.setJsonEntity("{\"query\": \"SELECT * FROM book WHERE bookName is null and price>5 LIMIT 5\"}");
		Response response = restClient.performRequest(request);
		System.out.println(response);
		String result = getResponseContent(response);
		System.out.println(result);
		
	}


	/**
	 * 
	 * @author hy
	 * @createTime 2021-07-31 13:51:11
	 * @description 获取带有返回值的响应数据,例如select查询操作
	 * @param response
	 * @return
	 * @throws UnsupportedOperationException
	 * @throws IOException
	 *
	 */
	private static String getResponseContent(Response response) throws UnsupportedOperationException, IOException {
		if (response == null) {
			return null;
		}
		HttpEntity entity = response.getEntity();
		StringBuilder builder = new StringBuilder();
		if (entity != null) {
			InputStream content = entity.getContent();
			BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(content));
			String line = null;
			while ((line = bufferedReader.readLine()) != null) {
				builder.append(line);
				builder.append("\n");
			}
		}
		return builder.toString();
	}

3.查询结果

format表示返回的格式,默认就是json

八月 01, 2021 1:18:43 下午 org.elasticsearch.client.RestClient logResponse
警告: request [GET http://localhost:9200/_nodes/http?timeout=1000ms] returned 1 warnings: [299 Elasticsearch-7.13.4-c5f60e894ca0c61cdbae4f5a686d9f08bcefc942 "Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.13/security-minimal-setup.html to enable security."]
八月 01, 2021 1:18:43 下午 org.elasticsearch.client.RestClient logResponse
警告: request [GET http://localhost:9200/_sql] returned 1 warnings: [299 Elasticsearch-7.13.4-c5f60e894ca0c61cdbae4f5a686d9f08bcefc942 "Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.13/security-minimal-setup.html to enable security."]
Response{requestLine=GET /_sql HTTP/1.1, host=http://localhost:9200, response=HTTP/1.1 200 OK}
{"columns":[{"name":"bookName","type":"text"},{"name":"count","type":"long"},{"name":"id","type":"long"},{"name":"price","type":"float"},{"name":"publishDate","type":"text"}],"rows":[[null,null,2,66.6,null]]}

查询成功

3. 缺点

1.不能使用分页查询,这个导致有点尴尬,而且具有多个限制官方描述限制

2.而且还可以支持其他的query?,感觉有点跑偏了,果然还是原生的查询好

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:53:03  更:2021-08-02 10:54:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/22 8:58:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码