您当前的位置: 首页 > 

一一哥Sun

暂无认证

  • 3浏览

    0关注

    622博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Day16_04_ES教程之在Kibana客户端进行DSL查询与过滤

一一哥Sun 发布时间:2019-07-06 17:29:26 ,浏览量:3

在Kibana客户端进行DSL查询与过滤 一. DSL简介 1. 什么是DSL?
由ES提供丰富且灵活的查询语言叫做DSL查询(Query DSL),它允许你构建更加复杂、强大的查询. DSL(Domain Specific Language特定领域语言)以JSON请求体的形式出现.
2. DSL组成: DSL查询+DSL过滤
dsl过滤简单理解为就是精确查询,而dsl查询是模糊查询(like).由于查询需要做相关度排序,并且过滤可以缓存,所以过滤的效率高于查询.所以只有必须要用查询的时候才用它(模糊查询),否则都用过滤.
3. DSL客户端工具

可以利用Kibana的Dev Tools作为客户端工具,执行相关的DSL命令.

二. 基本命令 1. 获取所有数据
GET  /_search
2. 创建Document
PUT /products/product/1
{
    "name" : "mac pro",
    "desc" :  "苹果本,很贵",
    "price" :  30,
    "tag": [ "很贵", "好用" ]
}

PUT /products/product/2
{
    "name" : "小米",
    "desc" :  "手机中的战斗机",
    "price" :  25,
    "tag": [ "发烧机" ]
}

PUT /products/product/3
{
    "name" : "西瓜",
    "desc" :  "夏天的解暑神器",
    "price" :  2,
    "tag": [ "麒麟瓜" ]
}
3. 检索文档查询
GET /products/product/1
4. 替换文档(全量替换)
PUT /products/product/1
{
    "name" : "神舟笔记本",
    "desc" :  "还不错哦",
    "price" :  300,
    "tag": [ "国产", "不错" ]
}
5. 更新文档(_update)
POST /products/product/1/_update
{
  "doc":
    {
      "price":70
    }
}
6. 删除文档
DELETE /products/product/1
注意:

在删除一个Document之后,它不是立即物理删除的,它的版本等信息还保留着.

三. DSL查询 1. query string search

比如要搜索全部商品:GET /products/product/_search(参数直接拼接在请求url上,不带json参数).

query string search的由来,因为search参数都是以http请求的query string所附带的,搜索商品名称中包含mac pro的商品,并且按照售价降序排序: GET /products/product/_searchq=name:mac pro&sort=price:desc

适用于临时在命令行使用一些工具,比如curl,快速的发出请求,来检索想要的信息.但是如果查询请求很复杂,是很难去构建的,所以在生产环境中,几乎很少使用query string search.

2. query DSL

DSL: Domain Specified Language, 特定领域的语言.http request body: 请求体,可以用json的格式来构建查询语法,比较方便.也可以构建各种复杂的语法,比query string search功能强大的多.

2.1 查询所有的商品
GET products/product/_search
{
  "query":
    {
      "match_all": {}
    }
}
2.2 查询名称包含 "小米" 的产品,同时按照价格进行降序排序
GET products/product/_search
{
  "query": {
    "match": {
      "name": "小米"
    }
  },
  "sort": [
    {
      "price":"desc"
    }
  ]
}
2.3 分页查询

总共3条商品,假设每页就显示1条商品,现在显示第1页,所以就查出来第1个商品.

GET products/product/_search
{
  "query": {
    "match_all": {}
  }, 
  "from": 0,
  "size": 1
}
2.4 查询指定项
GET products/product/_search
{
  "query": {
    "match_all": {}
  },
  "_source":["name","price"]
}
四. DSL过滤 1. DSL过滤简介

DSL过滤语句和DSL查询语句非常相似,但是它们的使用目的却不同: DSL过滤查询一般是指我们的条件“有”或者“没有”,而DSL查询则一般是指我们的条件“有多像”. DSL过滤和DSL查询在性能上的区别:

  • 1️⃣.过滤结果可以缓存并应用到后续请求;
  • 2️⃣.查询语句同时匹配文档,计算相关性,所以更耗时,且不缓存;
  • 3️⃣.过滤语句可有效地配合查询语句完成文档过滤.

原则上,使用DSL查询做全文搜索或其他需要进行相关性评分的场景,其它全用DSL过滤.

2. 过滤查询

搜索商品名称包含 "西瓜",且售价大于2元的商品.

# dsl过滤
GET products/product/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_all": {}
        }
      ],
      "filter": {
        "range": {
          "price": {
            "gte": 10,
            "lte": 100
          }
        }
      }
    }
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 2,
  "_source": ["name","price"]
}
3. 单词搜索与过滤(Term和Terms) 3.1 term过滤
GET products/product/_search
{
    "query": {
        "bool": {
            "must": { 
                "match_all": {} 
            }, 
            "filter": { 
                "term": { 
                    "tags":"甜" 
                } 
            } 
        } 
    }
}
3.2 Terms搜索与过滤
GET products/product/_search
{
    "query": {
        "terms": {
            "tags": ["甜","新疆"]
        }
    }
}
4. 组合条件搜索与过滤(Bool)

组合搜索bool可以组合多个查询条件为一个查询对象,查询条件包括must、should和must_not.

例如: 查询爱好有美女,同时也有喜欢游戏或运动,且出生于1990-06-30及之后的人.

{
    "query": {
        "bool": {
            "must": [{"term": {"hobby": "美女"}}],
            "should": [
                 {"term": {"hobby": "游戏"}}, 
                 {"term": {"hobby": "运动"}} 
            ],
            "must_not": [
                {"range" :{"birth_date":{"lt": "1990-06-30"}}} 
            ],
            "filter": [...],
            "minimum_should_match": 1
        }
    }
}

提示:

如果 bool 查询下没有must子句,那至少应该有一个should子句,但是 如果有 must子句,那么没有 should子句也可以进行查询.

5. 范围查询与过滤(range)

range过滤允许我们按照指定范围查找一批数据:

gt:>   gte:>=   lt:<  lte:            
关注
打赏
1665624836
查看更多评论
0.0759s