sql语句转为es查询条件(elasticsearch-sql使用)

这篇具有很好参考价值的文章主要介绍了sql语句转为es查询条件(elasticsearch-sql使用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求:将sql语句转为es查询所用的json语句

github源码地址:

https://gitee.com/weiyxiong_admin/elasticsearch-sql/blob/master/src/test/java/org/nlpcn/es4sql/ExplainTest.java

比如将select * from esIndex where lastTime = 1648540192929;
转化为es查询语句
{"from":0,"size":1000,"query":{"bool":{"filter":[{"bool":{"must":[{"match_phrase":{"lastTime ":{"query":1648540192929,"slop":0,"zero_terms_query":"NONE","boost":1.0}}}],"adjust_pure_negative":true,"boost":1.0}}],"adjust_pure_negative":true,"boost":1.0}}}

1、添加pom.xml依赖

<!-- https://mvnrepository.com/artifact/org.nlpcn/elasticsearch-sql -->
		<dependency>
    		<groupId>org.nlpcn</groupId>
    		<artifactId>elasticsearch-sql</artifactId>
    		<version>6.8.13.0</version>
		</dependency>

2、scala 将sql转为es查询json语句

object ESUtils {
// 1、获取searchDao
lazy val searchDao = {
		import org.elasticsearch.client.Client
		import org.elasticsearch.client.node.NodeClient
		import org.elasticsearch.common.settings.Settings
		import org.elasticsearch.common.util.concurrent.ThreadContext
		import org.elasticsearch.threadpool.ThreadPool
		// 填写上自己的cluster.name
        val settings = Settings.builder().put("cluster.name", MetaStorageImplementation.elasticsearchClusterName).build()
        // val settings = Settings.builder().put("cluster.name", "my-application").build()
        val  threadPool = new ThreadPool(settings)
		val client = new NodeClient(settings, threadPool)
		new org.nlpcn.es4sql.SearchDao(client) 
	}
//2、通过sql转为es查询语句
	def sqlToEsQuery(sql : String) : String = {
		val string = searchDao.explain(sql).explain().explain()
		string
	}

3、测试

def main(args: Array[String]): Unit = {
	val sql = ESUtils.sqlToEsQuery("select * from esIndex where lastTime = 1648540192929")
	val esJSON =ESUtils.sqlToEsQuery(sql)
    println(esJSON)
   }
}

4、查询返回结果展示(即步骤三esJSON结果打印)

{"from":0,"size":1000,"query":{"bool":{"filter":[{"bool":{"must":[{"match_phrase":{"lastAccessed":{"query":1648540192929,"slop":0,"zero_terms_query":"NONE","boost":1.0}}}],"adjust_pure_negative":true,"boost":1.0}}],"adjust_pure_negative":true,"boost":1.0}}}

5、打开postman文章来源地址https://www.toymoban.com/news/detail-538041.html

POST请求
请求头: http://ip:port/esIndex /_search
请求体:
为 步骤四的返回结果展示esJSON
{"from":0,"size":1000,"query":{"bool":{"filter":[{"bool":{"must":[{"match_phrase":{"lastTime":{"query":1648540192929,"slop":0,"zero_terms_query":"NONE","boost":1.0}}}],"adjust_pure_negative":true,"boost":1.0}}],"adjust_pure_negative":true,"boost":1.0}}}
查询,即可查到符合条件的数据

到了这里,关于sql语句转为es查询条件(elasticsearch-sql使用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【Elasticsearch】ES查询出满足以下其中任意一个条件的订单

    需求:最近测试经理给我这边提出一个需求,大致可以描述为查询出\\\" 购买的商品名称中包含’测试’ “、” 订单的收货地址包含’B360’ \\\"、“收货人手机号为测试人员的手机号”; 一、实现方案 当时评估了两种方案: ①、直接从数据库中查询; ②、从ES中查询; 方案①

    2024年02月16日
    浏览(40)
  • 如何使用ES做简单的时间条件过滤+模糊查询+精确匹配+关键字排除,查询 elasticsearch查询结果包含或排除某些字段、_source查询出需要的属性名称

    目录 一、时间条件过滤+模糊查询+精确匹配+排除 1. 查询出包含 log_geo 的数据 “wildcard”: { “message”: “log_geo” } 2. 查询某个时间段的数据 3. 条件查询与条件排除数据 4. from 表示起始的记录的ID 5. size 表示显示的记录数 6.sort排序 desc降序、asc升序  7.should查询在mysql中

    2024年01月18日
    浏览(70)
  • ES多条件查询

    场景:想要查询出设备id 为 3 的所有设备上报信息,并且上报信息的开始时间或结束时间只要有一个满足 在 某个时间段里即可。 在 Elasticsearch 中,您可以使用布尔查询来实现同时满足条件1并且满足条件2或条件3中的一个的查询。具体来说,您可以使用“must”子句来指定满足

    2024年02月09日
    浏览(39)
  • ES之多条件、范围查询

    一、多条件查询 1.条件“且”,即查询\\\"title\\\"为\\\"test6\\\",且\\\"num\\\"为5的数据 【GET】请求:http://127.0.0.1:9200/test-index-1/_search,参数如下 结果如下 2.条件“或”,即查询\\\"title\\\"为\\\"test6\\\",或\\\"title\\\"为\\\"test8\\\"的数据 【GET】请求:http://127.0.0.1:9200/test-index-1/_search,参数如下 结果如下 二、范围

    2024年02月11日
    浏览(45)
  • ORM 自定义sql,where条件变量值为null,转为:where remark=null是不对的

    ORM 自定义sql,where条件变量值为null,转为:where remark=null是不对的 该如何解决呢? 例子如下: 需要在变量的值为null时,改为: remark is null 这是SQL的语法. 使用ORM自定义sql, 在where条件,使用remark=#{remark @toIsNULL1}才是对的. 代码参考: https://gitee.com/automvc/bee-exam Bee,一个简单易用,功能强大的

    2024年02月12日
    浏览(57)
  • ES7.x的查询语句及java查询语句

    Elasticsearch 7.x 是一个基于 Lucene 的分布式搜索引擎,它提供了一个分布式全文搜索引擎,可以快速、准确地搜索、分析和存储海量数据。Elasticsearch 7.x 的主要特点包括: 分布式架构:Elasticsearch 7.x 是一个分布式系统,它可以运行在多个节点上,每个节点都是相互独立的,并且

    2024年02月08日
    浏览(45)
  • ES实现三表关联查询+条件过滤

            很多时候mysql的表之间是一对多的关系,比如库信息表(元数据信息),表信息表(元数据信息),字段信息表(元数据信息)。一个库可以包含多个表,一个表可以包含多个字段。他们的关系:库—(1:n)-表—(1:n)-字段。         ElasticsSearch(以下简称ES)处

    2024年02月05日
    浏览(47)
  • ES:多值(in)查询和条件批量删除

    Elasticsearch 查询删除语句 查询结果 查询结果 多值批量查询结果如下 删除语句 删除结果如下

    2024年02月11日
    浏览(52)
  • MySQL 参考文档:SQL 语句优化(SELECT 语句优化)之索引条件下推(索引下推)优化

    索引下推优化官方文档说明 (Section 8.2.1.5):https://dev.mysql.com/doc/refman/5.7/en/index-condition-pushdown-optimization.html 1. 什么是索引下推? qquad 索引条件下推 (Index Condition Pushdown,ICP) 是 MySQL 在使用索引从表中检索行时的一种优化方法。在没有 ICP 的情况下,存储引擎遍历索引以定位基

    2024年02月16日
    浏览(43)
  • elasticsearch之多条件查询

    字段名:用于指定要搜索的字段名称。例如, message 字段。 值:用于指定要搜索的值。例如, error 。 运算符:用于指定如何比较字段和值之间的关系。例如, : 表示相等, 表示大于, 表示小于, = 表示大于等于, = 表示小于等于, != 表示不等于, AND 表示逻辑与, OR 表示

    2024年04月13日
    浏览(28)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包