如何用你最熟悉的 SQL 来查询 Elasticsearch 中的数据?

【Elasticsearch】Elasticsearch如何实现 SQL语句中 Group By 和 Limit 的功能 1.概述 转载:https://elasticsearch.cn/article/629 有 SQL 背景的同学在学习 Elasticsearch 时,面对一个查询需求,不由自主地会先思考如何用 SQL 来实现,然后再去想 Elasticsearch 的 Query DSL 如何实现。那么本篇就给大家讲一条常见的 SQL 语句如何用 Elasticsearch 的查询语言实现。 1. SQL语句 假设我们有一个汽车的数据集,每个汽车都有车型、颜色等字段,我希望获取颜色种类大于1个的前2车型。假设汽车的数据. 阅读详情

点击上方“芋道源码”,选择“设为星标”

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 8:55 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:blog.youkuaiyun.com/UbuntuTouch/

article/details/105658911

Elasticsearch是一个全文搜索引擎,具有您期望的所有优点,例如相关性评分,词干,同义词等。而且,由于它是具有水平可扩展的分布式文档存储,因此它可以处理数十亿行数据,而不会费劲。针对Elasticsearch专业人员来说,大多数人喜欢使用DSL来进行搜索,但是对于一些不是那么专业的人员来说,他们更为熟悉的是SQL语句。如何让他们对Elasticsearch的数据进行查询是一个问题。借助Elasticsearch SQL,你可以使用熟悉的查询语法访问全文搜索,超快的速度和轻松的可伸缩性。X-Pack包含一项SQL功能,可对Elasticsearch索引执行SQL查询并以表格格式返回结果。

在今天的文章里,我们将简单介绍一下如何使用Elasticsearch SQL来对我们的数据进行查询。在之前的一篇文章“Kibana:Canvas入门”里也有Elasticsearch SQL的具体用例介绍。

安装

对于还没安装好自己的Elasticsearch的开发者来说,你可以参阅我之前的文章“Elastic:菜鸟上手指南”来进行安装自己的Elasticsearch及Kibana。在这里我就不累述了。

准备数据

我们首先打开Kibana:

点击上面的“Load a data set and a Kibana dashboard”:

点击上面的Add data,这样我们就可以完成实验数据的导入了。在Elasticsearch中,我们会找到一个叫kibana_sample_data_flights 的索引。

SQL 实操

查询有哪些索引

根据 Elasticsearch 的文档 ,我们可以使用如下的命令来查看有哪些索引:

POST /_sql?format=txt
{
  "query": "SHOW tables"
}

上面的命令显示结果:

检索Elasticsearch schema 信息:DSL vs SQL

首先,我们确定表/索引的schema以及可供我们使用的字段。我们将通过REST界面执行此操作:

POST /_sql
{
  "query": """
    DESCRIBE kibana_sample_data_flights
  """
}

上面命令的结果:

{
  "columns" : [
    {
      "name" : "column",
      "type" : "keyword"
    },
    {
      "name" : "type",
      "type" : "keyword"
    },
    {
      "name" : "mapping",
      "type" : "keyword"
    }
  ],
  "rows" : [
    [
      "AvgTicketPrice",
      "REAL",
      "float"
    ],
    [
      "Cancelled",
      "BOOLEAN",
      "boolean"
    ],
    [
      "Carrier",
      "VARCHAR",
      "keyword"
    ],
    [
      "Dest",
      "VARCHAR",
      "keyword"
    ],
    [
      "DestAirportID",
      "VARCHAR",
      "keyword"
    ],
    [
      "DestCityName",
      "VARCHAR",
      "keyword"
    ],
    [
      "DestCountry",
      "VARCHAR",
      "keyword"
    ],
    [
      "DestLocation",
      "GEOMETRY",
      "geo_point"
    ],
    [
      "DestRegion",
      "VARCHAR",
      "keyword"
    ],
    [
      "DestWeather",
      "VARCHAR",
      "keyword"
    ],
    [
      "DistanceKilometers",
      "REAL",
      "float"
    ],
    [
      "DistanceMiles",
      "REAL",
      "float"
    ],
    [
      "FlightDelay",
      "BOOLEAN",
      "boolean"
    ],
    [
      "FlightDelayMin",
      "INTEGER",
      "integer"
    ],
    [
      "FlightDelayType",
      "VARCHAR",
      "keyword"
    ],
    [
      "FlightNum",
      "VARCHAR",
      "keyword"
    ],
    [
      "FlightTimeHour",
      "VARCHAR",
      "keyword"
    ],
    [
      "FlightTimeMin",
      "REAL",
      "float"
    ],
    [
      "Origin",
      "VARCHAR",
      "keyword"
    ],
    [
      "OriginAirportID",
      "VARCHAR",
      "keyword"
    ],
    [
      "OriginCityName",
      "VARCHAR",
      "keyword"
    ],
    [
      "OriginCountry",
      "VARCHAR",
      "keyword"
    ],
    [
      "OriginLocation",
      "GEOMETRY",
      "geo_point"
    ],
    [
      "OriginRegion",
      "VARCHAR",
      "keyword"
    ],
    [
      "OriginWeather",
      "VARCHAR",
      "keyword"
    ],
    [
      "dayOfWeek",
      "INTEGER",
      "integer"
    ],
    [
      "timestamp",
      "TIMESTAMP",
      "datetime"
    ]
  ]
}

也可以通过url参数format = txt以表格形式格式化以上响应。例如:

POST /_sql?format=txt
{
  "query": "DESCRIBE kibana_sample_data_flights"
}

上面命令查询的结果是:

      column      |     type      |    mapping
------------------+---------------+---------------
AvgTicketPrice    |REAL           |float
Cancelled         |BOOLEAN        |boolean
Carrier           |VARCHAR        |keyword
Dest              |VARCHAR        |keyword
DestAirportID     |VARCHAR        |keyword
DestCityName      |VARCHAR        |keyword
DestCountry       |VARCHAR        |keyword
DestLocation      |GEOMETRY       |geo_point
DestRegion        |VARCHAR        |keyword
DestWeather       |VARCHAR        |keyword
DistanceKilometers|REAL           |float
DistanceMiles     |REAL           |float
FlightDelay       |BOOLEAN        |boolean
FlightDelayMin    |INTEGER        |integer
FlightDelayType   |VARCHAR        |keyword
FlightNum         |VARCHAR        |keyword
FlightTimeHour    |VARCHAR        |keyword
FlightTimeMin     |REAL           |float
Origin            |VARCHAR        |keyword
OriginAirportID   |VARCHAR        |keyword
OriginCityName    |VARCHAR        |keyword
OriginCountry     |VARCHAR        |keyword
OriginLocation    |GEOMETRY       |geo_point
OriginRegion      |VARCHAR        |keyword
OriginWeather     |VARCHAR        |keyword
dayOfWeek         |INTEGER        |integer
timestamp         |TIMESTAMP      |datetime

是不是感觉回到SQL时代啊:)

向前迈进,只要提供来自REST api的示例响应,我们就会使用上面显示的表格响应结构。要通过控制台实现相同的查询,需要使用以下命令登录:

./bin/elasticsearch-sql-cli http://localhost:9200

我们可在屏幕上看到如下的画面:

太神奇了。我们直接看到SQL的命令提示符了。在上面的命令行中,我们打入如下的命令:

DESCRIBE kibana_sample_data_flights;

这个结果和我们在Kibana中得到的结果是一样的。

上面的schema也会随对在SELECT子句中显示的字段的任何查询一起返回,从而为任何潜在的驱动程序提供格式化或对结果进行操作所需的必要类型信息。例如,考虑带有LIMIT子句的简单SELECT,以使响应简短。默认情况下,我们返回1000行。

我们发现索引的名字kibana_sample_data_flights比较长,为了方便,我们来创建一个alias:

PUT /kibana_sample_data_flights/_alias/flights

这样在以后的操作中,当我们使用flights的时候,其实也就是对索引kibana_sample_data_flights进行操作。

我们执行如下的命令:

POST /_sql?format=txt
{
  "query": "SELECT FlightNum FROM flights LIMIT 1"
}

显示结果:

   FlightNum
---------------
9HY9SWR

相同的REST请求/响应由JDBC驱动程序和控制台使用:

sql> SELECT OriginCountry, OriginCityName FROM flights LIMIT 1;
 OriginCountry | OriginCityName
---------------+-----------------
DE             |Frankfurt am Main

请注意,如果在任何时候请求的字段都不存在(区分大小写),则表格式和强类型存储区的语义意味着将返回错误-这与Elasticsearch行为不同,在该行为中,根本不会返回该字段。例如,将上面的内容修改为使用字段“OrigincityName”而不是“OriginCityName”会产生有用的错误消息:

sql> SELECT OriginCountry, OrigincityName FROM flights LIMIT 1;
Bad request [Found 1 problem(s)
line 1:23: Unknown column [OrigincityName], did you mean any of [OriginCityName, DestCityName]?]

同样,如果我们尝试在不兼容的字段上使用函数或表达式,则会出现相应的错误。通常,分析器在验证AST时会较早失败。为了实现这一点,Elasticsearch必须了解每个字段的索引映射和功能。因此,任何具有安全性访问SQL接口的客户端都需要适当的权限。

如果我们继续提供每一个请求和相应的回复,我们将最终获得一篇冗长的博客文章!为了简洁起见,以下是一些带有感兴趣的注释的日益复杂的查询。

使用 WHERE 及 ORDER BY 来 SELECT

“找到飞行时间超过5小时的美国最长10班航班。”

POST /_sql?format=txt
{
  "query": """
     SELECT OriginCityName, DestCityName FROM flights WHERE FlightTimeHour > 5 AND OriginCountry='US' ORDER BY FlightTimeHour DESC LIMIT 10
  """
}

显示结果是:

OriginCityName |   DestCityName
---------------+-------------------
Chicago        |Oslo
Cleveland      |Seoul
Denver         |Chitose / Tomakomai
Nashville      |Verona
Minneapolis    |Tokyo
Portland       |Treviso
Spokane        |Vienna
Kansas City    |Zurich
Kansas City    |Shanghai
Los Angeles    |Zurich

限制行数的运算符因SQL实现而异。对于Elasticsearch SQL,我们在实现LIMIT运算符时与Postgresql/Mysql保持一致。

Math

只是一些随机数字...

sql> SELECT ((1 + 3) * 1.5 / (7 - 6)) * 2 AS random;
    random
---------------
12.0

这代表服务器端对功能执行某些后处理的示例。没有等效的Elasticsearch DSL查询。

Functions & Expressions

“在2月份之后查找所有航班,该航班的飞行时间大于5小时,并且按照时间最长来排序。”

POST /_sql?format=txt
{
  "query": """
     SELECT MONTH_OF_YEAR(timestamp), OriginCityName, DestCityName FROM flights WHERE FlightTimeHour > 1 AND MONTH_OF_YEAR(timestamp) > 2 ORDER BY FlightTimeHour DESC LIMIT 10
    """
}

显示结果是:

MONTH_OF_YEAR(timestamp)|OriginCityName | DestCityName
------------------------+---------------+---------------
4                       |Chicago        |Oslo
4                       |Osaka          |Spokane
4                       |Quito          |Tucson
4                       |Shanghai       |Stockholm
5                       |Tokyo          |Venice
5                       |Tokyo          |Venice
5                       |Tokyo          |Venice
5                       |Buenos Aires   |Treviso
5                       |Amsterdam      |Birmingham
5                       |Edmonton       |Milan

这些功能通常需要在Elasticsearch中运用Painless变形才能达到等效的效果,而SQL的功能声明避免任何脚本编写。还要注意我们如何在WHERE和SELECT子句中使用该函数。WHERE子句组件被下推到Elasticsearch,因为它影响结果计数。SELECT函数由演示中的服务器端插件处理。

请注意,可用功能列表可通过“SHOW FUNCTIONS”检索

sql> SHOW FUNCTIONS;
      name       |     type
-----------------+---------------
AVG              |AGGREGATE
COUNT            |AGGREGATE
FIRST            |AGGREGATE
FIRST_VALUE      |AGGREGATE
LAST             |AGGREGATE
LAST_VALUE       |AGGREGATE
MAX              |AGGREGATE
 ...

将其与我们之前的数学能力相结合,我们可以开始制定查询,对于大多数DSL用户来说,查询将非常复杂。

“找出最快的2个航班(速度)的距离和平均速度,这些航班在星期一,星期二或星期三上午9点至11点之间离开,并且距离超过500公里。将距离和速度四舍五入到最接近的整数。如果速度相等,请先显示最长的时间。”

首先我们在上面的DESCRIBE kibana_sample_data_flights命令的输出中,我们可以看到FlightTimeHour是一个keyword。这个显然是不对的,因为它是一个数值。也许在最初的设计时这么想的。我们需要把这个字段改为float类型的数据。

PUT flight1
{
  "mappings": {
    "properties": {
      "AvgTicketPrice": {
        "type": "float"
      },
      "Cancelled": {
        "type": "boolean"
      },
      "Carrier": {
        "type": "keyword"
      },
      "Dest": {
        "type": "keyword"
      },
      "DestAirportID": {
        "type": "keyword"
      },
      "DestCityName": {
        "type": "keyword"
      },
      "DestCountry": {
        "type": "keyword"
      },
      "DestLocation": {
        "type": "geo_point"
      },
      "DestRegion": {
        "type": "keyword"
      },
      "DestWeather": {
        "type": "keyword"
      },
      "DistanceKilometers": {
        "type": "float"
      },
      "DistanceMiles": {
        "type": "float"
      },
      "FlightDelay": {
        "type": "boolean"
      },
      "FlightDelayMin": {
        "type": "integer"
      },
      "FlightDelayType": {
        "type": "keyword"
      },
      "FlightNum": {
        "type": "keyword"
      },
      "FlightTimeHour": {
        "type": "float"
      },
      "FlightTimeMin": {
        "type": "float"
      },
      "Origin": {
        "type": "keyword"
      },
      "OriginAirportID": {
        "type": "keyword"
      },
      "OriginCityName": {
        "type": "keyword"
      },
      "OriginCountry": {
        "type": "keyword"
      },
      "OriginLocation": {
        "type": "geo_point"
      },
      "OriginRegion": {
        "type": "keyword"
      },
      "OriginWeather": {
        "type": "keyword"
      },
      "dayOfWeek": {
        "type": "integer"
      },
      "timestamp": {
        "type": "date"
      }
    }
  }
}

我们需要reindex这个索引。

POST _reindex
{
  "source": {
    "index": "flights"
  },
  "dest": {
    "index": "flight1"
  }
}

那么现在flight1的数据中,FlightTimeHour字段将会是一个float的类型。我们再次重新设置alias为flights:

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "flight1",
        "alias": "flights"
      }
    },
    {
      "remove": {
        "index": "kibana_sample_data_flights",
        "alias": "flights"
      }
    }
  ]
}

那么现在flights将是指向flight1的一个alias。

我们使用如下的SQL语句来查询:

sql> SELECT timestamp, FlightNum, OriginCityName, DestCityName, ROUND(DistanceMiles) AS distance, ROUND(DistanceMiles/FlightTimeHour) AS speed, DAY_OF_WEEK(timestamp) AS day_of_week FROM flights WHERE DAY_OF_WEEK(timestamp) >= 0 AND DAY_OF_WEEK(timestamp) <= 2 AND HOUR_OF_DAY(timestamp) >=9 AND HOUR_OF_DAY(timestamp) <= 10 ORDER BY speed DESC, distance DESC LIMIT 2;
       timestamp        |   FlightNum   |OriginCityName | DestCityName  |   distance    |     speed     |  day_of_week
------------------------+---------------+---------------+---------------+---------------+---------------+---------------
2020-05-17T10:53:52.000Z|LAJSKLT        |Guangzhou      |Lima           |11398.0        |783.0          |1
2020-04-27T09:30:39.000Z|VLUDO2H        |Buenos Aires   |Moscow         |8377.0         |783.0          |2

一个相当复杂且奇怪的问题,但希望您能明白这一点。还要注意我们如何创建字段别名并在ORDER BY子句中引用它们。

还要注意,不需要在SELECT子句中指定WHERE和ORDER BY中使用的所有字段。这可能与您过去使用的SQL实现不同。例如,以下内容完全正确:

POST /_sql
{
  "query":"SELECT timestamp, FlightNum FROM flights WHERE AvgTicketPrice > 500 ORDER BY AvgTicketPrice"
}

它显示:

{
  "columns" : [
    {
      "name" : "timestamp",
      "type" : "datetime"
    },
    {
      "name" : "FlightNum",
      "type" : "text"
    }
  ],
  "rows" : [
    [
      "2020-04-26T09:04:20.000Z",
      "QG5DXD3"
    ],
    [
      "2020-05-02T23:18:27.000Z",
      "NXA71BT"
    ],
    [
      "2020-04-17T01:55:18.000Z",
      "VU8K9DM"
    ],
    [
      "2020-04-24T08:46:45.000Z",
      "UM8IKF8"
    ],
...
]

将SQL查询转换为DSL

我们都曾尝试过要在Elasticsearch DSL中表达的SQL查询,或者想知道它是否是最佳的。新SQL接口的引人注目的功能之一是它能够协助Elasticsearch的新采用者解决此类问题。使用REST接口,我们只需将/translate附加到“sql”端点,即可获取驱动程序将发出的Elasticsearch查询。

让我们考虑一下以前的一些查询:

POST /_sql
{
  "query":"SELECT timestamp, FlightNum FROM flights WHERE AvgTicketPrice > 500 ORDER BY AvgTicketPrice"
}

对于任何有经验的Elasticsearch用户,等效的DSL都应该是显而易见的:

{
  "columns" : [
    {
      "name" : "timestamp",
      "type" : "datetime"
    },
    {
      "name" : "FlightNum",
      "type" : "text"
    }
  ],
  "rows" : [
    [
      "2020-04-26T09:04:20.000Z",
      "QG5DXD3"
    ],
    [
      "2020-05-02T23:18:27.000Z",
      "NXA71BT"
    ],
    [
      "2020-04-17T01:55:18.000Z",
      "VU8K9DM"
    ],
    [
      "2020-04-24T08:46:45.000Z",
      "UM8IKF8"
    ],
...
]

WHERE子句将按您期望的那样转换为range和term查询。请注意,子字段的OriginCountry.keyword变体如何用于与父代OriginCountry(文本类型)的精确匹配。不需要用户知道基础映射的行为差异-正确的字段类型将会被自动选择。有趣的是,该接口尝试通过在_source上使用docvalue_fields来优化检索性能,例如适用于启用了doc值的确切类型(数字,日期,关键字)。我们可以依靠Elasticsearch SQL为指定的查询生成最佳的DSL。

现在考虑我们上次使用的最复杂的查询:

POST /_sql/translate
{
  "query": "SELECT OriginCityName, DestCityName FROM flights WHERE FlightTimeHour > 5 AND OriginCountry='US' ORDER BY FlightTimeHour DESC LIMIT 10"
}

上面的响应为:

{
  "size" : 10,
  "query" : {
    "bool" : {
      "must" : [
        {
          "range" : {
            "FlightTimeHour" : {
              "from" : 5,
              "to" : null,
              "include_lower" : false,
              "include_upper" : false,
              "boost" : 1.0
            }
          }
        },
        {
          "term" : {
            "OriginCountry.keyword" : {
              "value" : "US",
              "boost" : 1.0
            }
          }
        }
      ],
      "adjust_pure_negative" : true,
      "boost" : 1.0
    }
  },
  "_source" : {
    "includes" : [
      "OriginCityName",
      "DestCityName"
    ],
    "excludes" : [ ]
  },
  "sort" : [
    {
      "FlightTimeHour" : {
        "order" : "desc",
        "missing" : "_first",
        "unmapped_type" : "float"
      }
    }
  ]
}

是不是觉得非常复杂啊?

我们的WHERE和ORDER BY子句已转换为 painless 脚本,并在Elasticsearch提供的排序和脚本查询中使用。这些脚本甚至被参数化以避免编译并利用脚本缓存。

附带说明一下,尽管以上内容代表了SQL语句的最佳翻译,但并不代表解决更广泛问题的最佳解决方案。实际上,我们希望在索引时间对文档中的星期几,一天中的小时和速度进行编码,因此可以只使用简单的范围查询。这可能比使用painless 脚本解决此特定问题的性能更高。实际上,由于这些原因,其中的某些字段实际上甚至已经存在于文档中。这是用户应注意的常见主题:尽管我们可以依靠Elasticsearch SQL实现为我们提供最佳翻译,但它只能利用查询中指定的字段,因此不一定能为更大的问题查询提供最佳解决方案。为了实现最佳方法,需要考虑基础平台的优势,而_translate API可能是此过程的第一步。

    



欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢:

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 20 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

兄弟,艿一口,点个赞!????

015:机载三维激光扫描技术相关知识 机载三维激光扫描系统(LiDAR)是集激光、GPS、INS等尖端技术于一体的三维航空遥感技术,能高效准确获取地表三维信息。该系统由GPS、INS、激光扫描测距系统、成像装置和工作平台组成,各部件协同工作以获取精确的空间定位、运动状态、地表三维坐标及真实色彩信息。通过制定飞行计划、安置GPS基站、激光扫描测量、惯性测量及获取高清数码影像等步骤,机载LiDAR技术能实时获取大范围高精度三维数据。该技术具有扫描速度快、精度高、全数字特征等优势,广泛应用于测绘、工程、环境监测和城市建设等领域,如城市三维模型重建、灾 阅读详情

相关推荐

AVM环视算法实战:从3D碗型投影到多场景模式切换的实现与优化

本文深入探讨了AVM环视算法在3D碗型投影和多场景模式切换中的实现与优化。通过分析3D碗型投影的核心原理和动态视角调节技术,展示了如何实现从超广角模式到转向模式的无缝切换。文章还分享了性能优化实战经验,包括实时性提升和图像拼接质量优化,为开发者提供了宝贵的AVM系统开发指南。

weixin_42573113的博客 171

ES中SQL查询详解

本文主要介绍了Elasticsearch SQL的使用。如果你对DSL查询语句不熟悉,那么采用SQL查询索引数据将是一个非常简单,0门槛入门的好方法。 1、注意ES在6.3版本之后才原生支持SQL查询。 2、可以通过translate API将sql语句转为DSL语句。 3、ES的SQL查询提供对自查询的简单支持。 4、通过SHOW FUNCTIONS可以查看ES的SQL查询支持的函数。 5、ES的SQL查询可以通过游标cursor实现分页查询。

弹指天下 2万+

uniapp APP分享;判断用户是否安装APP,已安装直接打开,未安装跳转下载页;uniapp 在外部打开APP(schemes)

A将某商品分享给B,B点击后判断是否安装APP,若安装直接打开,没有安装则跳转下载页;

@微你 5683

Elasticsearch Sql 查询

ElasticSearch 从6.3.0版本也开始支持 SQL 查询了。在早期版本中,Elasticsearch 执行 SQL 的 REST 接口为_xpack/sql,但在版本 7 以后这个接口已经被废止而推荐使用_sql接口。Elasticsearch 支持传统关系型数据库 SQL 语句中的查询语句,但并不支持DML、DCL 句。换句话说,它只支持 SELECT 语句,不支持 INSERT、UPDATE、DELETE语句。

小强签名设计 的博客 1167

Minio HTTPS证书配置实战:从申请到部署全流程

本文详细介绍了Minio HTTPS证书配置的全流程,从申请到部署,确保对象存储服务的安全性。内容包括证书类型选择、文件处理、服务配置调整及常见问题解决,帮助用户在生产环境中快速实现HTTPS加密传输,提升数据安全。

weixin_42638178的博客 433

华为P812E光猫补全shell配置PON口模式

终于看到华为企业级的带2.5电口P812E横空出世了,相信很多发烧友也已经将此收入昂中。相信体验的同时,遇到的第一件事情就是配置PON口模式的问题,本文将带发烧基友解锁模式。

GUAIYU的博客 5743

elasticsearch通过sql查询数据

大家好,最近公司让封装一下es的客户端api,然后我一顿劈里啪啦的封装了50,60个api,领导告诉我,我封装的不行,不是他们想要的结果。他们想要的是,别人调用的时候,只需要传几个参数就可以的那种,而不需要了解es内部的原理。好吧,这个我服。 作为小卒,我们只有祈祷公司有需求,那么我才不会被裁员。 开始咱们的sql吧: /** * 通过sql进行查询 * @param t 实体类 ...

zhangshng的博客 1206

零基础教程:用Python给试卷照片自动切题(有道OCR+PIL完整流程)

本文为零基础用户提供了一套完整的Python自动化切题方案。通过调用有道OCR API识别试卷照片中的题目坐标,并利用PIL库进行精准裁剪,将杂乱的试卷图片自动分割为独立的题目图像。教程详细涵盖了环境搭建、图像预处理、API调用、坐标解析与批量处理全流程,帮助教育工作者和技术爱好者高效处理大量试卷,实现工作流程自动化。

grpc6streamer的博客 1178

ElasticSearch之排序使用-ES常用排序方法

ElasticSearch之排序使用-ES常用排序方法 在搜索系统中,最常遇到的一个需求就是排序,同时排序也是搜索引擎需要改造最多的地方。 常见排序一般有如下两类: (1)按照相似度匹配得分排序 (2)按照指定字段排序 相似度得分排序是系统默认的排序方式,更多时候,我们需要按照指定字段排序。lucene中,基于字段内容的排序是由FieldComparator接口来实现的,在排序中又分为单字段排序和多字段排序。在排序速度方面,数值类型排序速度最快,在lucene中数值类型的排序是由 NumericCompar

qq_46416934的博客 2782

回归预测 | MATLAB实现MPR多元多项式回归

回归预测 | MATLAB实现MPR多元多项式回归

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 1645

TC8:SOMEIPSRV_SD_MESSAGE_07-09

TTL为服务实例的生命周期。在此生命周期之后,不提供服务实例。

jasonj333 908

ElasticSearch进阶:一文全览各种ES查询在Java中的实现

本文基于7.13.2版本,es从7.0以后,发生了很大的更新。7.3以后,已经不推荐使用TransportClient这个client,取而代之的是Java High Level REST Client。 https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.3/java-rest-high.html SpringBoot集成ElasticSearch pom.xml: <dependency> <groupId

云深不知处 2万+

OpenClaw进阶实战(二十五):抖音企业号——私信回复与视频评论分析

本文介绍了抖音企业号自动化运营的技术方案,重点解决私信互动效率低和风控严格两大挑战。文章分析了抖音集成的三大技术壁垒(视频复杂性、风控体系、封闭API)并对比了三种技术路径的优缺点。针对不同规模的运营主体,推荐官方API+RPA混合架构或真机RPA+AI辅助的方案。 详细讲解了环境准备步骤,包括抖音Skill安装、Cookie获取和配置文件设置。核心实现部分展示了私信自动回复功能的安全合规实现,包含意图分类、优先级排序、延迟发送等防封禁机制,并提供了完整的Python代码示例。该方案通过模拟人工操作、限制日

PeterPan的博客 161

Elasticsearch: ES使用sql语句进行查询

//format 定义返回的数据类型 适合php的推荐使用json ,除此之外还可以选择 txt,csv,yaml,cbor,smile等使用sql语句查询有一个弊端 就是开始定义某列数据的类型 后期存储时 存入了错误的数据类型 存储时成功的 但是使用sql语句查询会报错,所有最有效的ES查询方法还是使用原生的 当我们不确定有哪些SQL函数可以直接使用时 ,可以在 /_xpack/sql?format=json 接口使用query='show functions',会列举出支持的SQL函数; /*..

Daisy的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

告别复杂SQL!Elasticsearch SQL与JDBC实战,让你用最熟悉的方式查询ES

Elasticsearch SQL功能在持续快速演进中,本文基于Elasticsearch 8.x版本。记住:没有银弹,只有持续的学习和适应。在我过去十年的大厂经历中,见证了企业从传统数据库向Elasticsearch迁移的完整历程。它告诉我们,最先进的技术不一定是最好的技术,Elasticsearch SQL模块的核心是一个高度优化的查询转换引擎。它标志着Elasticsearch从"专家专用工具"向"企业级数据平台"的演进。Elasticsearch SQL正是用正确的方式,让正确的技术发挥最大价值。

持续输出Java相关知识 1009

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

使用SQL查询ES:SpringBoot+Jdbc+Mybatis+Elasticsearch整合方案

1. 前言 ES作为一个搜索工具,寄托于Lucene之上,提供了方便的数据存储和搜索服务,一般的用它来作为网页数据索引以及存储用户画像(即用户标签)数据,可以提供复具有复杂的查询条件的服务。例如在网页索引中,通过倒排的方式索引的方式,对文档进行分词存储,可以很快的定位关键字所在的文档,从而达到毫秒级的搜索效率;而在用户画像存储中,ES既可以作为标签宽表,提供类似HIVE宽表的特性,又可以达到传统关系型数据库或者HBase的实时查询的要求,所以在一般的用户画像存储中也是不二之选。 ES是一个搜索工具,它提供的

哈哈哈哈哈哈哈 7869

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【elasticsearch】es-sql中的一些查詢 sql 函数

ES-SQL 中可以写sql 进行数据查询 ,但是个别的查询sql 还是有一定的区别,以下记录一些实际用到的一些函数 1、模糊查询 非分词字段 类型为keyword 的字段 使用 like, 和mysql 数据库中的like 使用一样 例如 mobile like ’%keyword%‘ 分词字段 类型为text 的字段 使用 matchPhrase,对应es 中的 match_phrase 例如 name =matchPhrase(‘keyword’) 2、多值查询

qq_31286957的博客 3195

Elasticsearch官方已支持SQL查询,用起来贼方便!

平时使用Elasticsearch的时候,偶尔会在Kibana中使用Query DSL来查询数据。每次要用到Query DSL时都基本忘光了,需要重新在回顾一遍,最近发现Elastics...

macrozheng的专栏 1万+

ELK系列(十二)、使用SQL查询ElasticSearch7.7.0

ES的DSL可能对很多人来说有学习成本,但SQL相信每个开发无论是应用开发,大数据开发还是数据分析人员应该都是最熟悉的,本篇就介绍一下如何使用es7的sql功能对索引数据进行查询。 ELK系列(一)、安装ElasticSearch+Logstash+Kibana+Filebeat-v7.7.0 ELK系列(二)、在Kibana中使用RESTful操作ES库 ELK系列(三)、安装Logstash插件及打包离线安装包 ELK系列(四)、Logstash读取nginx日志写入ES中 ELK系列(五)、

王义凯 的博客 3612

ES08# ElasticSearch中的SQL查询

引言通过SQL进行检索ElasticSearch的文档,在一些复杂场景更为灵活。由于DSL需要熟悉其语法,自建的日志平台可能将DSL屏蔽和封装,暴露SQL的查询更易上手。本文顺着官方指南实操一把,文章内容有。Kibana执行SQL查询Post请求执行SQL分页查询SQL中使用DSL过滤使用复杂查询条件其他查询方式(运行时字段与异步SQL)一、Kibana执行SQL查询请求...

gaoliang1719的专栏 2299
上一篇: Swagger(丝袜哥)3.0 官方 Starter 终于出了,真的香吗?!
下一篇: 不想用Dubbo?试试这个阿里内部最强架构!
公众号-芋道源码
博客等级 码龄10年 1636粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值