微信小程序怎么做网站链接,wordpress 批量插件,网站建设需要多少人员,南宁网站建设nnit30Elasticsearch引擎 Elasticsearch是当今许多生产部署中使用最广泛的搜索引擎之一。 它基于Lucene搜索库#xff0c;它提供的主要功能之一是在Lucene之上的基于JSON的查询DSL#xff0c;它提供了一种易于使用的机制来与搜索引擎进行交互。 但是#xff0c;查询DSL非常特定于E… Elasticsearch引擎 Elasticsearch是当今许多生产部署中使用最广泛的搜索引擎之一。 它基于Lucene搜索库它提供的主要功能之一是在Lucene之上的基于JSON的查询DSL它提供了一种易于使用的机制来与搜索引擎进行交互。 但是查询DSL非常特定于Elasticsearch。 Elasticsearch 6.3中引入的SQL支持带来了一种针对搜索引擎运行查询的标准机制并且朝着更容易被已熟悉SQL的开发人员采用更进一步。 尽管SQL最初是为与关系数据库管理系统一起使用而设计的但它已经在许多其他系统例如NoSQL数据库中实现。 以分布式数据处理引擎如Apache Spark或基于分布式缓存的计算系统如Apache Ignite中提供的受支持的SQL为例其中SQL是所提供的核心查询工具之一。 在本文中我们将探讨Elasticsearch SQL的工作方式。 初步设置 为了尝试本文中的示例您需要启动一个本地Elasticsearch至少6.3实例。 在本文中我们将使用最新的Elasticsearch 7.5。 我们将创建一个帖子索引其中包含来自论坛的帖子。 我们将使用Elasticsearch Java客户端将数据馈入索引并且我们将不为索引的字段提供显式映射为简单起见我们将让Elasticsearch为我们自动创建它。 首先我们将创建一个依赖于Elasticsearch Java高级客户端的Maven项目不推荐使用旧的Elasticsearch HTTP客户端并计划在Elasticsearch 8.0中将其删除 dependency groupIdorg.elasticsearch.client /groupId artifactIdelasticsearch-rest-high-level-client /artifactId version7.5.0 /version /dependency 我们将使用以下代码在posts索引中创建10000个生成的post文档 RestHighLevelClient client new RestHighLevelClient( RestClient.builder( new HttpHost( localhost , 9200 , http ))); String[] possibleUsers new String[] { Martin , Jim , John }; String[] possibleDates new String[] { 2019-12-15 , 2019-12-16 , 2019-12-17 }; String[] possibleMessages new String[] { Hello, Javaadvent ! , Cool set of blog posts. We want more ! , Elasticsearch SQL is great. }; for ( int i 1 ; i 10000 ; i) { MapString, Object jsonMap new HashMap(); jsonMap.put( user , possibleUsers[ThreadLocalRandom.current().nextInt( 0 , 3 )]); jsonMap.put( date , possibleDates[ThreadLocalRandom.current().nextInt( 0 , 3 )]); jsonMap.put( message , possibleMessages[ThreadLocalRandom.current().nextInt( 0 , 3 )]); IndexRequest request new IndexRequest( posts ) .id(String.valueOf(i)).source(jsonMap); client.index(request, RequestOptions.DEFAULT); } client.close(); 运行SQL查询 我们可以使用Kibana来查询用户名为Martin的所有文档如下所示 POST /_sql ? format txt { query : SELECT * FROM posts where user Martin } 另一个示例是计算消息字段中包含Javaadvent单词的所有文档 POST /_sql ? format txt { query : SELECT count(*) FROM posts where message like %Javaadvent% } 现在如果您想在Java应用程序中运行上述查询则有几种选择 使用Elasticsearch JDBC驱动程序运行它。 但是此选项仅适用于白金级和企业级订阅。 REST客户端调用Elasticsearch SQL端点。 如果只有基本免费的Elasticsearch选项则可以选择此选项。 您可以使用几乎所有用于Java的REST客户端来使用第二个选项但是我们将使用低级Elasticsearch REST客户端 dependency groupIdorg.elasticsearch.client /groupId artifactIdelasticsearch-rest-client /artifactId version7.5.0 /version /dependency 以下代码块仅从posts索引返回10个文档 RestClient restClient RestClient.builder( new HttpHost( localhost , 9200 , http )).build(); Request request new Request( POST , /_sql ); request.setJsonEntity( {\query\:\SELECT * FROM posts limit 10\} ); Response response restClient.performRequest(request); String responseBody EntityUtils.toString(response.getEntity()); System.out.println(responseBody); restClient.close(); 要了解如何在后台执行SQL查询可以使用/ _sql / translate端点下提供的translation API。 如果要查看为先前的SQL查询生成的查询DSL我们可以在Kibana中运行以下命令 POST /_sql/translate { query : SELECT * FROM posts limit 10 , fetch_size : 10 } 我们应该得到类似于以下内容的结果 { size : 10, _source : { includes : [ message , user ], excludes : [ ] }, docvalue_fields : [ { field : date , format : epoch_millis } ], sort : [ { _doc : { order : asc } } ] } Elasticsearch SQL功能 我们演示了如何执行基本的SQL查询。 Elasticsearch SQL引擎非常丰富包括 SQL查询响应的多种格式例如csvjsontxtyaml等 与Elasticsearch SQL一起应用其他查询DSL过滤; 由elasticsearch-sql-cli实用程序提供的CLI您可以在其中直接执行SQL查询。 关于SQL实现本身可以参考支持的SQL命令以及SQL函数和运算符参考文档。 结论 在本文中我们演示了如何使用Elasticsearch SQL与Elasticsearch引擎进行交互。 与基于JSON的查询DSL相比使用此机制的可能性更高。 但是Elasticsearch SQL不能替代它而是在它之上构建的并且可以满足搜索引擎提供的众多功能。 翻译自: https://www.javacodegeeks.com/2020/01/elasticsearch-sql.html