自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Elasticsearch不會DSL沒事,來試試SQL吧

數(shù)據(jù)庫
Elasticsearch 是一個分布式、RESTful 風(fēng)格的搜索和數(shù)據(jù)分析引擎,能夠解決不斷涌現(xiàn)出的各種用例,最常見的是作為搜索引擎,提供項目中全文搜索。

 Elasticsearch 是一個分布式、RESTful 風(fēng)格的搜索和數(shù)據(jù)分析引擎,能夠解決不斷涌現(xiàn)出的各種用例,最常見的是作為搜索引擎,提供項目中全文搜索。

一提到Elasticsearch,必然需要提到Query DSL,DSL(Domain Specific Language特定領(lǐng)域語言)以JSON請求體的形式,但DSL語法并沒有那么直觀,如果不經(jīng)常使用,就會遺忘,等需要用的時候,感覺非常不方便。

[[355139]]

今天我們就看下官方提供的X-Pack,它包含一項SQL功能,可對Elasticsearch索引執(zhí)行SQL查詢并以表格格式返回結(jié)果。Elasticsearch SQL(6.3版本以后)不僅允許針對Elasticsearch實時執(zhí)行類似SQL的查詢。也可以使用REST接口,或者使用JDBC,保證任何客戶端都可以使用SQL對Elasticsearch中的數(shù)據(jù)進(jìn)行原生搜索和聚合數(shù)據(jù)。我們可以將Elasticsearch SQL看作是一種翻譯器,它可以將SQL翻譯成Query DSL。

官方說明:https://www.elastic.co/guide/en/elasticsearch/reference/7.8/xpack-sql.html

下面我們先使用es + kabana體驗一下(安裝就不說明了)

構(gòu)建數(shù)據(jù)

先創(chuàng)建索引,注意es 7.x去掉了type,本文使用的是7.8.0版本的es和kabana。

創(chuàng)建索引


放入文檔數(shù)據(jù)

 

 

SQL查詢數(shù)據(jù)


SQL語法

在ES中使用SQL查詢的語法與在數(shù)據(jù)庫中使用基本一致,具體格式如下:

  1. SELECT select_expr [, ...] 
  2. FROM table_name ] 
  3. WHERE condition ] 
  4. GROUP BY grouping_element [, ...] ] 
  5. HAVING condition] 
  6. ORDER BY expression [ ASC | DESC ] [, ...] ] 
  7. [ LIMIT [ count ] ] 
  8. [ PIVOT ( aggregation_expr FOR column IN ( value [ [ AS ] alias ] [, ...] ) ) ] 

 大家可以在實際中自行體驗一下,也可以通過下列語句,將sql轉(zhuǎn)成DSL 

  1. POST /_sql/translate 
  2.   "query""SELECT * FROM student LIMIT 10" 

  

下面我們來看下jdbc的操作

JDBC使用SQL查詢

引入依賴

  1. <dependency> 
  2.   <groupId>org.elasticsearch.plugin</groupId> 
  3.   <artifactId>x-pack-sql-jdbc</artifactId> 
  4.   <version>7.8.0</version> 
  5. </dependency> 

注意該依賴maven中央倉庫沒有,需要配置倉庫地址

  1. <repositories> 
  2.         <repository> 
  3.             <id>elastic.co</id> 
  4.             <url>https://artifacts.elastic.co/maven</url> 
  5.         </repository> 
  6.     </repositories> 

 jdbc相關(guān)代碼

  1. Class.forName("org.elasticsearch.xpack.sql.jdbc.EsDriver"); 
  2. Connection connection = DriverManager.getConnection("jdbc:es://http://127.0.0.1:9200"); 
  3. Statement statement = connection.createStatement(); 
  4. ResultSet resultSet = statement.executeQuery("select name from student"); 
  5. while (resultSet.next()){ 
  6.   System.out.println(resultSet.getString("name")); 

 執(zhí)行后,報錯如下

  1. Exception in thread "main" java.sql.SQLInvalidAuthorizationSpecException: current license is non-compliant for [jdbc] 
  2.     at org.elasticsearch.xpack.sql.client.JreHttpUrlConnection$SqlExceptionType.asException(JreHttpUrlConnection.java:330) 
  3.     at org.elasticsearch.xpack.sql.client.JreHttpUrlConnection.parserError(JreHttpUrlConnection.java:207) 
  4.     at org.elasticsearch.xpack.sql.client.JreHttpUrlConnection.request(JreHttpUrlConnection.java:170) 
  5.     at org.elasticsearch.xpack.sql.client.HttpClient.lambda$post$1(HttpClient.java:106) 
  6.     at org.elasticsearch.xpack.sql.client.JreHttpUrlConnection.http(JreHttpUrlConnection.java:66) 
  7.     at org.elasticsearch.xpack.sql.client.HttpClient.lambda$post$2(HttpClient.java:105) 
  8.     at java.security.AccessController.doPrivileged(Native Method) 
  9.     at org.elasticsearch.xpack.sql.client.HttpClient.post(HttpClient.java:104) 
  10.     at org.elasticsearch.xpack.sql.client.HttpClient.query(HttpClient.java:81) 
  11.     at org.elasticsearch.xpack.sql.jdbc.JdbcHttpClient.query(JdbcHttpClient.java:70) 
  12.     at org.elasticsearch.xpack.sql.jdbc.JdbcStatement.initResultSet(JdbcStatement.java:160) 
  13.     at org.elasticsearch.xpack.sql.jdbc.JdbcStatement.execute(JdbcStatement.java:151) 
  14.     at org.elasticsearch.xpack.sql.jdbc.JdbcStatement.executeQuery(JdbcStatement.java:40) 
  15.     at com.ganhuojun.gracefulshutdown.configuration.Test.main(Test.java:22) 

 發(fā)現(xiàn)current license is non-compliant for [jdbc],說明功能被限制,查詢下官網(wǎng)發(fā)現(xiàn),jdbc在免費開源的版本是不支持的 

 

查詢地址:https://www.elastic.co/cn/subscriptions

那怎么解決呢?

官網(wǎng)提供了我們修改license api的功能,去體驗一些新的功能

https://www.elastic.co/guide/en/elasticsearch/reference/master/start-trial.html

按照官網(wǎng)操作后,執(zhí)行前面的jdbc代碼,可以得到正確結(jié)果


由于jdbc版本使用需要付費,建議在實際項目中,使用DSL或者SQL REST API操作。

 

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2022-06-17 11:10:43

PandasPolarsPython

2020-09-28 11:09:54

SQLDSL

2020-07-10 12:06:28

WebpackBundleless瀏覽器

2020-08-25 08:03:59

測試Sharness結(jié)構(gòu)

2023-06-13 08:00:57

ChatGPT語言模型

2023-10-29 09:11:03

DSL語法

2020-11-04 16:34:45

單元測試技術(shù)

2021-09-07 11:20:02

binlogMySQL數(shù)據(jù)庫

2021-08-04 08:31:10

MySQL數(shù)據(jù)庫日志

2023-11-13 12:48:32

語言DSL

2022-12-30 09:12:55

查詢es搜索值

2020-12-15 10:24:05

2012-07-03 09:38:42

前端

2019-09-21 21:32:34

數(shù)據(jù)庫SQL分布式

2020-04-03 14:25:55

diff Meld工具

2024-06-19 10:01:50

2018-03-20 16:20:29

LinuxChromiumLibreOffice

2021-01-27 11:36:34

代碼開發(fā)工具

2016-09-23 18:32:42

iTunesIOS 10蘋果

2024-03-11 08:21:49

點贊
收藏

51CTO技術(shù)棧公眾號