Elasticsearch-SQL介绍

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: Elasticsearch-SQL介绍

ElasticSearch SQL

[toc]

执行SQL

POST /_xpack/sql?format=json
{
   
    "query": "SELECT * FROM ads_user_profile where name like '%睿'"
      ,"fetch_size":"1"
}

SQL转DSL

kibana

POST /_sql/translate
{
   
    "query": "SELECT * FROM ads_user_profile_2 where name rlike '...航' "
      ,"fetch_size":"1"
}

POST /_xpack/sql/translate
{
   
    "query": "SELECT * FROM ads_user_profile where name rlike '...航' "
      ,"fetch_size":"1"
}

/_xpack/sql/translate 已弃用

Scala调用Demo


import cn.hutool.core.codec.Base64Encoder
import cn.hutool.http.HttpUtil

/**
 * SQL转DSL语句
 *
 * @date 2022/6/28 上午10:02
 * @param esIP       ES地址 ip:port
 * @param esUsername ES用户名
 * @param esPassword ES密码
 * @author Jast
 */
class SqlConversionDSL(esIP: String, esUsername: String, esPassword: String) {


  /**
   * 查询前缀
   */
  private val queryPrefix = """{"query": """".stripMargin
  /**
   * 查询后缀
   */
  private val querySuffix = """"}""".stripMargin

  /**
   * SQL translate
   */
  private val url = s"http://${esIP}/_sql/translate"

  /**
   * SQL转换DSL
   *
   * @name convert
   * @date 2022/6/28 上午10:04
   * @return java.lang.String
   * @param sql
   * @author Jast
   */
  def convert(sql: String) = {
    val query = queryPrefix + sql + querySuffix
    val request = HttpUtil.createPost(url)
    request.header("Authorization", "Basic " + Base64Encoder.encode(esUsername + ":" + esPassword))
    request.body(query)
    request.execute().body()
  }
}

object SqlConversionDSL {
  def main(args: Array[String]): Unit = {
    val sqlConversionDSL = new SqlConversionDSL("172.16.24.143:9200", "elastic", "jast2@22#!")
    val str = sqlConversionDSL.convert("""SELECT * FROM ads_user_profile_2 where name rlike '...航' """)
    println(str)
  }
}

查询结果,query部分为具体查询条件

"query":{"regexp":{"name.keyword":{"value":"...航","flags_value":255,"max_determinized_states":10000,"boost":1.0}}}

{
   "size":1000,"query":{
   "regexp":{
   "name.keyword":{
   "value":"...航","flags_value":255,"max_determinized_states":10000,"boost":1.0}}},"_source":false,"fields":[{
   "field":"age"},{
   "field":"aid"},{
   "field":"area"},{
   "field":"jast_update_time"},{
   "field":"bind_cars"},{
   "field":"city"},{
   "field":"classification"},{
   "field":"constellation"},{
   "field":"day_of_birthday"},{
   "field":"device_id"},{
   "field":"domain_type"},{
   "field":"education"},{
   "field":"first_login_contact"},{
   "field":"first_login_time","format":"strict_date_optional_time_nanos"},{
   "field":"follow_wechat_gongzhonghao"},{
   "field":"gender"},{
   "field":"have_vw_cars"},{
   "field":"interested_models"},{
   "field":"interested_type"},{
   "field":"is_have_kid"},{
   "field":"is_vw_owner"},{
   "field":"last_check","format":"strict_date_optional_time_nanos"},{
   "field":"last_deal_big_area"},{
   "field":"last_deal_car_model"},{
   "field":"last_deal_car_type"},{
   "field":"last_deal_city"},{
   "field":"last_deal_date","format":"strict_date_optional_time_nanos"},{
   "field":"last_deal_dealer"},{
   "field":"last_deal_province"},{
   "field":"last_deal_small_area"},{
   "field":"last_login_contact"},{
   "field":"last_login_time","format":"strict_date_optional_time_nanos"},{
   "field":"marital_status"},{
   "field":"member_level"},{
   "field":"member_most_consume_type"},{
   "field":"member_score"},{
   "field":"month_of_birthday"},{
   "field":"name"},{
   "field":"network_type"},{
   "field":"offline_channels"},{
   "field":"one_id"},{
   "field":"open_id"},{
   "field":"phone"},{
   "field":"phone_brand"},{
   "field":"phone_os"},{
   "field":"private_domain_channel_1"},{
   "field":"private_domain_channel_2"},{
   "field":"province"},{
   "field":"public_domain_channel_1"},{
   "field":"public_domain_channel_2"},{
   "field":"registered_contact"},{
   "field":"registered_time","format":"strict_date_optional_time_nanos"},{
   "field":"result_date","format":"strict_date_optional_time_nanos"},{
   "field":"search_words"},{
   "field":"source"},{
   "field":"test_drive_car_type"},{
   "field":"test_drive_date","format":"strict_date_optional_time_nanos"},{
   "field":"test_drive_dealer"},{
   "field":"user_type"},{
   "field":"user_vins"},{
   "field":"users_cars"},{
   "field":"year_of_birthday"}],"sort":[{
   "_doc":{
   "order":"asc"}}]}

SQL GroupBy 截取keyword某一段进行分组查询

POST /_xpack/sql/translate
{
   
    "query": "SELECT SUBSTRING(jast_update_time,0,1),count(1) FROM ads_user_profile group by SUBSTRING(jast_update_time,0,1) "
   ,"fetch_size":"1"
}

转换为DSL

{
   
  "size" : 0,
  "_source" : false,
  "aggregations" : {
   
    "groupby" : {
   
      "composite" : {
   
        "size" : 1,
        "sources" : [
          {
   
            "b15264e0" : {
   
              "terms" : {
   
                "script" : {
   
                  "source" : "InternalSqlScriptUtils.substring(InternalQlScriptUtils.docValue(doc,params.v0),params.v1,params.v2)",
                  "lang" : "painless",
                  "params" : {
   
                    "v0" : "jast_update_time",
                    "v1" : 0,
                    "v2" : 1
                  }
                },
                "missing_bucket" : true,
                "value_type" : "string",
                "order" : "asc"
              }
            }
          }
        ]
      }
    }
  }
}

时间函数

https://wenku.baidu.com/view/997c9fdfadf8941ea76e58fafab069dc502247f1.html?_wkts_=1702021877344&bdQuery=ElasticSearch+sql+%E5%87%BD%E6%95%B0%E6%B8%85%E5%8D%95

https://www.elastic.co/guide/en/elasticsearch/reference/7.17/sql-functions-datetime.html

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
4月前
|
SQL 存储 关系型数据库
influxdb常用sql总结
influxdb常用sql总结
276 1
|
4月前
|
自然语言处理 索引
Elasticsearch 常用查询语句大全
【7月更文挑战第8天】Elasticsearch 常用查询语句大全
|
关系型数据库 MySQL Go
使用go-mysql-elasticsearch同步mysql数据库信息到ElasticSearch
本文介绍如何使用go-mysql-elasticsearch同步mysql数据库信息到ElasticSearch。1.go-mysql-elasticsearch简介go-mysql-elasticsearch是一个将MySQL数据自动同步到Elasticsearch的服务。
4360 0
Elasticsearch 基础查询语句汇总
包含指定条件查询,区间查询,指定多个id查询,模糊查询,多字段查询,分页查询等
|
SQL 弹性计算 Kubernetes
实践教程之采集PolarDB-X SQL日志到ElasticSearch
PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。本期实验将指导您如何采集PolarDB-X SQL日志到ElasticSearch。
|
存储 SQL 分布式计算
「PostgreSQL」用MapReduce的方式思考,但使用SQL
「PostgreSQL」用MapReduce的方式思考,但使用SQL
|
SQL 存储 关系型数据库
【最佳实践】使用 Elasticsearch SQL 实现数据查询
如何使用 Elasticsearch SQL 来对我们的数据进行查询。
5519 0
【最佳实践】使用 Elasticsearch SQL 实现数据查询
|
SQL 存储 缓存
Elasticsearch聚合深入详解——对比Mysql实现
聚合认知前提 桶(Buckets)——满足特定条件的文档的集合 指标(Metrics)——对桶内的文档进行统计计算 SELECT COUNT(color) FROM table GROUP BY color COUNT(color) 相当于指标。 GROUP BY color 相当于桶。
209 0
Elasticsearch聚合深入详解——对比Mysql实现
|
SQL Java 数据库连接
玩转 Elasticsearch 的 SQL 功能
  最近发布的 Elasticsearch 6.3 包含了大家期待已久的 SQL 特性,今天给大家介绍一下具体的使用方法。   首先看看接口的支持情况   目前支持的 SQL 只能进行数据的查询只读操作,不能进行数据的修改,所以我们的数据插入还是要走之前的常规索引接口。
468 0
|
数据可视化 关系型数据库 MySQL
go-mysql-elasticsearch实现mysql 与elasticsearch实时同步深入详解
引言: go-mysql-elasticsearch 是国内作者开发的一款插件。测试表明:该插件优点:能实现同步增、删、改、查操作。不足之处(待完善的地方): 1、仍处理开发、相对不稳定阶段; 2、没有日志,不便于排查问题及查看同步结果。 本文深入详解了插件的安装、使用、增删改查同步测试。
411 0