Elasticsearch - 查询 dsl语句

最近一段时间 在es-head 场景下面开始 使用 es dsl 查询语句,最开始接触的时候觉得确实是和 原来的关系数据库sql有一丝区别,这里以学习记录的目的,记录一下查询方法,方便用到时候使用 为了方便了解,每个es 查询增加了一个 对应的 sql 语句 其表名 为 es_table 方便理解


ES查询DSL语句

match_all 查询所有

没有条件 只是查询所有的数据
对应sql: select * from es_table

{
  "query": {
    "match_all": {}
  }
}

size 限制查询条数查询

在最基础的查询的基础上 限制查询条数查询 这个限制为 只查询2条 数据
对应sql: select * from es_table where 1 = 1 limit 2

{
  "size": 2,
  "query": {
    "match_all": {}
  }
}

term 查询某个字段里含有某个关键词的文档

term 里面可以增加自定字段的查询 比如下面的查询为 查询 operate_Week 字段 等于 星期四 的所有数据
对应sql: select * from es_table where operate_Week = “星期四”

{
  "query": {
    "term": {
      "operate_Week": "星期四"
    }
  }
}

terms 查询某个字段里含有多个关键词的文档

terms 查询某个字段里含有多个关键词的文档 比如下面的查询为 查询 operate_Week 字段 等于 星期四 和 星期五 的所有数据
对应sql: select * from es_table where operate_Week = “星期四” or operate_Week = “星期五”
ps: 这个 terms 同时支持 传一个值

{
  "query": {
    "terms": {
      "operate_Week": [
        "星期四",
        "星期五"
      ]
    }
  }
}

bool(布尔查询)组合查询

在 ES 当中提供了 bool 查询,一个 bool 查询可以包含一个或多个查询字句,支持以下四种查询:
must:必须匹配,贡献算分
should:选择性匹配,贡献算分
must_not:查询字句,必须不能匹配
filter:必须匹配,不贡献算分
对应sql: select * from es_table where 1 = 1 and operateTime > 2020-01-01 01:01:01 and operateTime < 2021-04-20 10:06:08 and order = 1

{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "operateTime": {
              "from": "2020-01-01 01:01:01",
              "to": "2021-04-20 10:06:08"
            }
          }
        },
        {
          "term": {
            "order": "1"
          }
        }
      ]
    }
  }
}

bool 组合配合

通过 should 和 must_not 来进行组合查询
对应sql: select * from es_table where operate_Week = “星期四” or operate_Week = “星期五” and assetGroupName != “全国组” or assetGroupName != “”

{
  "query": {
    "bool": {
      "should": [
        {
          "terms": {
            "operate_Week": [
              "星期四",
              "星期五"
            ]
          }
        }
      ],
      "must_not": [
        {
          "terms": {
            "assetGroupName": [
              "全国组",
              ""
            ]
          }
        }
      ]
    }
  }
}

range 范围查询

在 ES 当中提供了 bool 查询,一个 bool 查询可以包含一个或多个查询字句,支持以下四种查询:
must:必须匹配,贡献算分
should:选择性匹配,贡献算分
must_not:查询字句,必须不能匹配
filter:必须匹配,不贡献算分
对应sql: select * from es_table where 1 = 1 and operateTime > 2020-01-01 01:01:01 and operateTime < 2021-04-20 10:06:08 and order = 1

{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "operateTime": {
              "from": "2020-01-01 01:01:01",
              "to": "2021-04-20 10:06:08"
            }
          }
        },
        {
          "term": {
            "order": "1"
          }
        }
      ]
    }
  }
}

boost

权重,为某个字段设置权重,权重越高,文档相关性得分就越高。通常来说,搜索商品名称要比商品简介的权重要高。


未完待续 。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值