{"id":101052,"date":"2020-01-02T10:00:39","date_gmt":"2020-01-02T08:00:39","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=101052"},"modified":"2019-12-17T11:31:31","modified_gmt":"2019-12-17T09:31:31","slug":"elasticsearch-sql","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html","title":{"rendered":"Elasticsearch SQL"},"content":{"rendered":"<h2 class=\"wp-block-heading\">The Elasticsearch engine<\/h2>\n<p>Elasticsearch is one of the most widely search engines being used in a number of production deployments today. It is based on the Lucene search library and one of the key features it provides is a JSON-based query DSL on top of Lucene that provides an easier to use mechanism for interacting with the search engine. However the query DSL is very specific to Elasticsearch. The SQL support introduced in Elasticsearch 6.3 has brought a standard mechanism for running queries against the search engine and has been one step further towards easier adoption by developers already familiar with SQL. Although SQL has been initially designed for use with relational database management systems it has been implemented in a wide range of other systems (such as NoSQL databases). Take for example SQL supported provided in a distributed data processing engine like Apache Spark or a distributed cache-based computation system like Apache Ignite where SQL is one of the core query facilities provided. In this article we will explore how Elasticsearch SQL works.<\/p>\n<h2 class=\"wp-block-heading\">Preliminary setup<\/h2>\n<p>In order to try the examples in the article you need to have a local Elasticsearch (at least 6.3) instance started. In this article we are going to use latest Elasticsearch 7.5. We will create a <strong>posts<\/strong> index that holds posts from a forum. We will be using the Elasticsearch Java client to feed data into the index and we are not going to provide explicit mapping for the fields of the index (for the purpose of simplicity we will let Elasticsearch automatically create it for us). First we will create a Maven project with a dependency to the Elasticsearch Java high level client (the old Elasticsearch HTTP client is deprecated and planned for removal in Elasticsearch 8.0):<\/p>\n<div>\n<div id=\"highlighter_438432\" class=\"syntaxhighlighter  bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">&lt;dependency&gt;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash plain\">&lt;groupId&gt;org.elasticsearch.client&lt;<\/code><code class=\"bash plain\">\/groupId<\/code><code class=\"bash plain\">&gt;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash plain\">&lt;artifactId&gt;elasticsearch-rest-high-level-client&lt;<\/code><code class=\"bash plain\">\/artifactId<\/code><code class=\"bash plain\">&gt;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash plain\">&lt;version&gt;7.5.0&lt;<\/code><code class=\"bash plain\">\/version<\/code><code class=\"bash plain\">&gt;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash plain\">&lt;<\/code><code class=\"bash plain\">\/dependency<\/code><code class=\"bash plain\">&gt;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>We will create 10000 generated post documents in the <strong>posts<\/strong> index using the following piece of code:<\/p>\n<div>\n<div id=\"highlighter_331079\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">RestHighLevelClient client = <\/code><code class=\"java keyword\">new<\/code> <code class=\"java plain\">RestHighLevelClient(<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">RestClient.builder(<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">new<\/code> <code class=\"java plain\">HttpHost(<\/code><code class=\"java string\">\"localhost\"<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">9200<\/code><code class=\"java plain\">, <\/code><code class=\"java string\">\"http\"<\/code><code class=\"java plain\">)));<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code>&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">String[] possibleUsers = <\/code><code class=\"java keyword\">new<\/code> <code class=\"java plain\">String[] {<\/code><code class=\"java string\">\"Martin\"<\/code><code class=\"java plain\">, <\/code><code class=\"java string\">\"Jim\"<\/code><code class=\"java plain\">, <\/code><code class=\"java string\">\"John\"<\/code><code class=\"java plain\">};<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">String[] possibleDates = <\/code><code class=\"java keyword\">new<\/code> <code class=\"java plain\">String[] {<\/code><code class=\"java string\">\"2019-12-15\"<\/code><code class=\"java plain\">, <\/code><code class=\"java string\">\"2019-12-16\"<\/code><code class=\"java plain\">, <\/code><code class=\"java string\">\"2019-12-17\"<\/code><code class=\"java plain\">};<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">String[] possibleMessages = <\/code><code class=\"java keyword\">new<\/code> <code class=\"java plain\">String[] {<\/code><code class=\"java string\">\"Hello, Javaadvent !\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"Cool set of blog posts. We want more !\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"Elasticsearch SQL is great.\"<\/code><code class=\"java plain\">};<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code>&nbsp;<\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">for<\/code><code class=\"java plain\">(<\/code><code class=\"java keyword\">int<\/code> <code class=\"java plain\">i = <\/code><code class=\"java value\">1<\/code><code class=\"java plain\">; i &lt;= <\/code><code class=\"java value\">10000<\/code><code class=\"java plain\">; i++) {<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">Map&lt;String, Object&gt; jsonMap = <\/code><code class=\"java keyword\">new<\/code> <code class=\"java plain\">HashMap&lt;&gt;();<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">jsonMap.put(<\/code><code class=\"java string\">\"user\"<\/code><code class=\"java plain\">, possibleUsers[ThreadLocalRandom.current().nextInt(<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">3<\/code><code class=\"java plain\">)]);<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">jsonMap.put(<\/code><code class=\"java string\">\"date\"<\/code><code class=\"java plain\">, possibleDates[ThreadLocalRandom.current().nextInt(<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">3<\/code><code class=\"java plain\">)]);<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">jsonMap.put(<\/code><code class=\"java string\">\"message\"<\/code><code class=\"java plain\">, possibleMessages[ThreadLocalRandom.current().nextInt(<\/code><code class=\"java value\">0<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">3<\/code><code class=\"java plain\">)]);<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">IndexRequest request = <\/code><code class=\"java keyword\">new<\/code> <code class=\"java plain\">IndexRequest(<\/code><code class=\"java string\">\"posts\"<\/code><code class=\"java plain\">)<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">.id(String.valueOf(i)).source(jsonMap); <\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">client.index(request, RequestOptions.DEFAULT);<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code>&nbsp;<\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">client.close();<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">Running the SQL queries<\/h2>\n<p>We can use Kibana to query all the documents where the username is <strong>Martin<\/strong> as follows:<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<div>\n<div id=\"highlighter_347913\" class=\"syntaxhighlighter  bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">POST <\/code><code class=\"bash plain\">\/_sql<\/code><code class=\"bash plain\">?<\/code><code class=\"bash functions\">format<\/code><code class=\"bash plain\">=txt<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash plain\">{<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash string\">\"query\"<\/code><code class=\"bash plain\">: <\/code><code class=\"bash string\">\"SELECT * FROM posts where user = 'Martin'\"<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Another example would be to count all the documents that contain the word <strong>Javaadvent<\/strong> in the <strong>message<\/strong> field:<\/p>\n<div>\n<div id=\"highlighter_444843\" class=\"syntaxhighlighter  bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">POST <\/code><code class=\"bash plain\">\/_sql<\/code><code class=\"bash plain\">?<\/code><code class=\"bash functions\">format<\/code><code class=\"bash plain\">=txt<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash plain\">{<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash string\">\"query\"<\/code><code class=\"bash plain\">: <\/code><code class=\"bash string\">\"SELECT count(*) FROM posts where message like '%Javaadvent%'\"<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Now if you want to run the above queries in your Java application you have a few options:<\/p>\n<ul class=\"wp-block-list\">\n<li>run it using Elasticsearch JDBC driver. This option however is available only with platinum and enterprise subscriptions;<\/li>\n<li>REST client calling the Elasticsearch SQL endpoint. This option is the one to choose if you only have the basic (free) Elasticsearch option.<\/li>\n<\/ul>\n<p>You can use pretty much any REST client for Java in order to use the second option but we will use the low-level Elasticsearch REST client:<\/p>\n<div>\n<div id=\"highlighter_540793\" class=\"syntaxhighlighter  bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">&lt;dependency&gt;<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash plain\">&lt;groupId&gt;org.elasticsearch.client&lt;<\/code><code class=\"bash plain\">\/groupId<\/code><code class=\"bash plain\">&gt;<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash plain\">&lt;artifactId&gt;elasticsearch-rest-client&lt;<\/code><code class=\"bash plain\">\/artifactId<\/code><code class=\"bash plain\">&gt;<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash plain\">&lt;version&gt;7.5.0&lt;<\/code><code class=\"bash plain\">\/version<\/code><code class=\"bash plain\">&gt;<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash plain\">&lt;<\/code><code class=\"bash plain\">\/dependency<\/code><code class=\"bash plain\">&gt;<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>The following block of code returns only 10 documents from the <strong>posts<\/strong> index:<\/p>\n<div>\n<div id=\"highlighter_590888\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">RestClient restClient = RestClient.builder(<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java keyword\">new<\/code> <code class=\"java plain\">HttpHost(<\/code><code class=\"java string\">\"localhost\"<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">9200<\/code><code class=\"java plain\">, <\/code><code class=\"java string\">\"http\"<\/code><code class=\"java plain\">)).build();<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code>&nbsp;<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">Request request = <\/code><code class=\"java keyword\">new<\/code> <code class=\"java plain\">Request(<\/code><code class=\"java string\">\"POST\"<\/code><code class=\"java plain\">,&nbsp; <\/code><code class=\"java string\">\"\/_sql\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">request.setJsonEntity(<\/code><code class=\"java string\">\"{\\\"query\\\":\\\"SELECT * FROM posts limit 10\\\"}\"<\/code><code class=\"java plain\">);<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">Response response = restClient.performRequest(request);<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">String responseBody = EntityUtils.toString(response.getEntity()); <\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">System.out.println(responseBody);<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">restClient.close();<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>To see how is the SQL query executed behind the scenes you can use the translate API provided under the \/_sql\/translate endpoint. We can run the following in Kibana If we want to see what is the query DSL generated for the previous SQL query:<\/p>\n<div>\n<div id=\"highlighter_163754\" class=\"syntaxhighlighter  bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">POST <\/code><code class=\"bash plain\">\/_sql\/translate<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash plain\">{<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash string\">\"query\"<\/code><code class=\"bash plain\">: <\/code><code class=\"bash string\">\"SELECT * FROM posts limit 10\"<\/code><code class=\"bash plain\">,<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash string\">\"fetch_size\"<\/code><code class=\"bash plain\">: 10<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>And we should get a result similar to the following:<\/p>\n<div>\n<div id=\"highlighter_622996\" class=\"syntaxhighlighter  bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">{<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;<\/code><code class=\"bash string\">\"size\"<\/code> <code class=\"bash plain\">: 10,<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;<\/code><code class=\"bash string\">\"_source\"<\/code> <code class=\"bash plain\">: {<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash string\">\"includes\"<\/code> <code class=\"bash plain\">: [<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash string\">\"message\"<\/code><code class=\"bash plain\">,<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash string\">\"user\"<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash plain\">],<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash string\">\"excludes\"<\/code> <code class=\"bash plain\">: [ ]<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;<\/code><code class=\"bash plain\">},<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;<\/code><code class=\"bash string\">\"docvalue_fields\"<\/code> <code class=\"bash plain\">: [<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash plain\">{<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash string\">\"field\"<\/code> <code class=\"bash plain\">: <\/code><code class=\"bash string\">\"date\"<\/code><code class=\"bash plain\">,<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash string\">\"format\"<\/code> <code class=\"bash plain\">: <\/code><code class=\"bash string\">\"epoch_millis\"<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash plain\">}<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;<\/code><code class=\"bash plain\">],<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;<\/code><code class=\"bash string\">\"sort\"<\/code> <code class=\"bash plain\">: [<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash plain\">{<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash string\">\"_doc\"<\/code> <code class=\"bash plain\">: {<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash string\">\"order\"<\/code> <code class=\"bash plain\">: <\/code><code class=\"bash string\">\"asc\"<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash plain\">}<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"bash spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"bash plain\">}<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"bash spaces\">&nbsp;&nbsp;<\/code><code class=\"bash plain\">]<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"bash plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">Elasticsearch SQL features<\/h2>\n<p>We demonstrated how we can execute basic SQL queries. The Elasticsearch SQL engine is quite rich and includes:<\/p>\n<ul class=\"wp-block-list\">\n<li>a number of formats for the SQL query response such as csv, json, txt, yaml and others;<\/li>\n<li>applying additional query DSL filtering along with the Elasticsearch SQL;<\/li>\n<li>a CLI provided by the <strong>elasticsearch-sql-cli<\/strong> utility where you can execute SQL queries directly.<\/li>\n<\/ul>\n<p>In terms of the SQL implementation itself you can refer to the <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/sql-commands.html\">supported SQL commands<\/a> and <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/sql-functions.html\">SQL functions and operators reference documentation<\/a><\/p>\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n<p>In this article we demonstrated how to use Elasticsearch SQL to interact with the Elasticsearch engine. There are high chances that this mechanism becomes more preferable to use than the JSON-based query DSL. However Elasticsearch SQL is not a replacement for it but is rather built on top of it and fulfills to plethora of features provided by the search engine.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>\n<p>Published on Java Code Geeks with permission by Martin Toshev, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener noreferrer\">JCG program<\/a>. See the original article here: <a href=\"https:\/\/www.javaadvent.com\/2019\/12\/elasticsearch-sql.html\" target=\"_blank\" rel=\"noopener noreferrer\">Elasticsearch SQL<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>The Elasticsearch engine Elasticsearch is one of the most widely search engines being used in a number of production deployments today. It is based on the Lucene search library and one of the key features it provides is a JSON-based query DSL on top of Lucene that provides an easier to use mechanism for interacting &hellip;<\/p>\n","protected":false},"author":11888,"featured_media":112,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[732],"class_list":["post-101052","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-elasticsearch"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Elasticsearch SQL - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn about Elasticsearch SQL? Check our article talking about elasticsearch, one of the most widely search engines\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Elasticsearch SQL - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about Elasticsearch SQL? Check our article talking about elasticsearch, one of the most widely search engines\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-02T08:00:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Martin Toshev\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Martin Toshev\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/01\\\/elasticsearch-sql.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/01\\\/elasticsearch-sql.html\"},\"author\":{\"name\":\"Martin Toshev\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/d6aa7d95e114929bd9da5d1a62db40e8\"},\"headline\":\"Elasticsearch SQL\",\"datePublished\":\"2020-01-02T08:00:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/01\\\/elasticsearch-sql.html\"},\"wordCount\":680,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/01\\\/elasticsearch-sql.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"keywords\":[\"Elasticsearch\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/01\\\/elasticsearch-sql.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/01\\\/elasticsearch-sql.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/01\\\/elasticsearch-sql.html\",\"name\":\"Elasticsearch SQL - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/01\\\/elasticsearch-sql.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/01\\\/elasticsearch-sql.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"datePublished\":\"2020-01-02T08:00:39+00:00\",\"description\":\"Interested to learn about Elasticsearch SQL? Check our article talking about elasticsearch, one of the most widely search engines\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/01\\\/elasticsearch-sql.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/01\\\/elasticsearch-sql.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/01\\\/elasticsearch-sql.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"java-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2020\\\/01\\\/elasticsearch-sql.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Elasticsearch SQL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/d6aa7d95e114929bd9da5d1a62db40e8\",\"name\":\"Martin Toshev\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a7ab09f89ce59abb723d92c2c46fff56b8b933ab8f6f81a0f69604ed6cfd4e4e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a7ab09f89ce59abb723d92c2c46fff56b8b933ab8f6f81a0f69604ed6cfd4e4e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a7ab09f89ce59abb723d92c2c46fff56b8b933ab8f6f81a0f69604ed6cfd4e4e?s=96&d=mm&r=g\",\"caption\":\"Martin Toshev\"},\"sameAs\":[\"https:\\\/\\\/www.javaadvent.com\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/martin-toshev\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Elasticsearch SQL - Java Code Geeks","description":"Interested to learn about Elasticsearch SQL? Check our article talking about elasticsearch, one of the most widely search engines","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html","og_locale":"en_US","og_type":"article","og_title":"Elasticsearch SQL - Java Code Geeks","og_description":"Interested to learn about Elasticsearch SQL? Check our article talking about elasticsearch, one of the most widely search engines","og_url":"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2020-01-02T08:00:39+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","type":"image\/jpeg"}],"author":"Martin Toshev","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Martin Toshev","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html"},"author":{"name":"Martin Toshev","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/d6aa7d95e114929bd9da5d1a62db40e8"},"headline":"Elasticsearch SQL","datePublished":"2020-01-02T08:00:39+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html"},"wordCount":680,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","keywords":["Elasticsearch"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html","url":"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html","name":"Elasticsearch SQL - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","datePublished":"2020-01-02T08:00:39+00:00","description":"Interested to learn about Elasticsearch SQL? Check our article talking about elasticsearch, one of the most widely search engines","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","width":150,"height":150,"caption":"java-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2020\/01\/elasticsearch-sql.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Elasticsearch SQL"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/d6aa7d95e114929bd9da5d1a62db40e8","name":"Martin Toshev","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a7ab09f89ce59abb723d92c2c46fff56b8b933ab8f6f81a0f69604ed6cfd4e4e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a7ab09f89ce59abb723d92c2c46fff56b8b933ab8f6f81a0f69604ed6cfd4e4e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a7ab09f89ce59abb723d92c2c46fff56b8b933ab8f6f81a0f69604ed6cfd4e4e?s=96&d=mm&r=g","caption":"Martin Toshev"},"sameAs":["https:\/\/www.javaadvent.com"],"url":"https:\/\/www.javacodegeeks.com\/author\/martin-toshev"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/101052","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/11888"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=101052"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/101052\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/112"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=101052"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=101052"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=101052"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}