Kibana的DSL语句使用

1 Query DSL结构化查询介绍

Query DSL是一个Java开源框架用于构建类型安全的SQL查询语句。采用API代替传统的拼接字符串来构造查询语句。目前Querydsl支持的平台包括JPA,JDO,SQL,Java Collections,RDF,Lucene,Hibernate Search。elasticsearch提供了一整套基于JSON的DSL语言来定义查询。

2 索引操作

在这里插入图片描述

(1)查询所有索引

GET /_cat/indices?v

结果如下:
在这里插入图片描述

(2)删除某个索引

DELETE /skuinfo

效果如下:
在这里插入图片描述

(3)新增索引

PUT /skuinfo

在这里插入图片描述
效果如下:
1564603974567
(4)创建映射

PUT /user/userinfo/_mapping
{
"properties": {
"name":{
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
},
"city":{
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
},
"age":{
"type": "long"
},
"description":{
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
}
}
}

效果如下:
在这里插入图片描述
(5)新增文档数据

PUT /user/userinfo/1
{
"name":"李四",
"age":22,
"city":"深圳",
"description":"李四来自湖北武汉!"
}

效果如下:
在这里插入图片描述
我们再增加3条记录:

#新增文档数据 id=2
PUT /user/userinfo/2
{
"name":"王五",
"age":35,
"city":"深圳",
"description":"王五家住在深圳!"
}
#新增文档数据 id=3
PUT /user/userinfo/3
{
"name":"张三",
"age":19,
"city":"深圳",
"description":"在深圳打工,来自湖北武汉"
}
#新增文档数据 id=4
PUT /user/userinfo/4
{
"name":"张三丰",
"age":66,
"city":"武汉",
"description":"在武汉读书,家在武汉!"
}
#新增文档数据 id=5
PUT /user/userinfo/5
{
"name":"赵子龙",
"age":77,
"city":"广州",
"description":"赵子龙来自深圳宝安,但是在广州工作!",
"address":"广东省茂名市"
}
#新增文档数据 id=6
PUT /user/userinfo/6
{
"name":"赵毅",
"age":55,
"city":"广州",
"description":"赵毅来自广州白云区,从事电子商务8年!"
}
#新增文档数据 id=7
PUT /user/userinfo/7
{
"name":"赵哈哈",
"age":57,
"city":"武汉",
"description":"武汉赵哈哈,在深圳打工已有半年了,月薪7500!"
}

(6)修改数据
a.替换操作
更新数据可以使用之前的增加操作,这种操作会将整个数据替换掉,代码如下:

#更新数据,id=4
PUT /user/userinfo/4
{
"name":"张三丰",
"description":"在武汉读书,家在武汉!在深圳工作!"
}

在这里插入图片描述使用GET命令查看:

#根据ID查询
GET /user/userinfo/4

在这里插入图片描述
b.更新操作
我们先使用下面命令恢复数据:

#恢复文档数据 id=4
PUT /user/userinfo/4
{
"name":"张三丰",
"age":66,
"city":"武汉",
"description":"在武汉读书,家在武汉!"
}

使用POST更新某个列的数据

#使用POST更新某个域的数据
POST /user/userinfo/4/_update
{
"doc":{
"name":"张三丰",
"description":"在武汉读书,家在武汉!在深圳工作!"
}
}

使用GET命令查看:

#根据ID查询
GET /user/userinfo/4

效果如下:
在这里插入图片描述(7)删除Document

#删除数据
DELETE user/userinfo/7

3 数据查询

(1)查询所有数据

#查询所有
GET /user/_search

效果如下:
在这里插入图片描述
(2)根据ID查询

#根据ID查询
GET /user/userinfo/2

效果如下:
1564605676871

(3)Sort排序

GET /user/_search
{
"query":{
"match_all": {}
},
"sort":{
"age":{
"order":"desc"
}
}
}

效果如下:
1564605923564

(4)分页

#分页实现
GET /user/_search
{
"query":{
"match_all": {}
},
"sort":{
"age":{
"order":"desc"
}
},
"from": 0,
"size": 2
}

解释:
from:从下N的记录开始查询
size:每页显示条数

效果如下:
在这里插入图片描述

4 查询模式

(1)term查询
term主要用于分词精确匹配,如字符串、数值、日期等
不适合情况:
1.列中除英文字符外有其它值
2.字符串值中有冒号或中文 3.系统自带属性如_version

如下案例:

#查询-term
GET _search
{
"query":{
"term":{
"city":"武汉"
}
}
}

效果如下:
在这里插入图片描述

(2)terms 查询
terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配 。

案例如下:

#查询-terms 允许多个Term
GET _search
{
"query":{
"terms":{
"city":
[
"武汉",
"广州"
]
}
}
}

效果如下:
在这里插入图片描述
(3)match查询

GET _search
{
"query": {
"match": {
"city": "广州武汉"
}
}
}

效果如下:
在这里插入图片描述
(4)query_string查询

GET _search
{
"query": {
"query_string": {
"default_field": "city",
"query": "广州武汉"
}
}
}

效果如下:
在这里插入图片描述(5) range 查询
range过滤允许我们按照指定范围查找一批数据。例如我们查询年龄范围
案例如下:

#-range 范围过滤
#gt表示> gte表示=>
#lt表示< lte表示<=
GET _search 
{
"query":{
"range": {
"age": {
"gte": 30,
"lte": 57
}
}
}
}

效果如下:
在这里插入图片描述(6)exists
exists 过滤可以用于查找拥有某个域的数据
案例如下:

#搜索 exists:是指包含某个域的数据检索
GET _search
{
"query": {
"exists":{
"field":"address"
}
}
}

效果如下:
在这里插入图片描述(7) bool 查询
bool 可以用来合并多个条件查询结果的布尔逻辑,它包含一下操作符:
must : 多个查询条件的完全匹配,相当于 and。
must_not : 多个查询条件的相反匹配,相当于 not。
should : 至少有一个查询条件匹配, 相当于 or。
这些参数可以分别继承一个过滤条件或者一个过滤条件的数组:
案例如下:

#过滤搜索 bool
#must : 多个查询条件的完全匹配,相当于 and。
#must_not : 多个查询条件的相反匹配,相当于 not。
#should : 至少有一个查询条件匹配, 相当于 or。
GET _search
{
"query": {
"bool": {
"must": [
{
"term": {
"city": {
"value": "深圳"
}
}
},
{
"range":{
"age":{
"gte":20,
"lte":99
}
}
}
]
}
}
}

效果如下:
在这里插入图片描述(8) match_all 查询
可以查询到所有文档,是没有查询条件下的默认语句。
案例如下:

#查询所有 match_all
GET _search
{
"query": {
"match_all": {}
}
}

在这里插入图片描述
(9) match 查询
match查询是一个标准查询,不管你需要全文本查询还是精确查询基本上都要用到它。
如果你使用 match 查询一个全文本字段,它会在真正查询之前用分析器先分析match一下查询字符:
案例如下:

#字符串匹配
GET _search
{
"query": {
"match": {
"description": "武汉"
}
}
}

效果如下:
在这里插入图片描述(10)prefix 查询
以什么字符开头的,可以更简单地用 prefix ,例如查询所有以张开始的用户描述
案例如下:

#前缀匹配 prefix
GET _search
{
"query": {
"prefix": {
"name": {
"value": "赵"
}
}
}
}

效果如下:
在这里插入图片描述
(11)multi_match 查询
multi_match查询允许你做match查询的基础上同时搜索多个字段,在多个字段中同时查一个
案例如下:

#多个域匹配搜索
GET _search
{
"query": {
"multi_match": {
"query": "深圳",
"fields": [
"city",
"description"
]
}
}
}

效果如下:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值