Elasticsearch---(4)Elasticsearch DSL常用语法

3、 Elasticsearch DSL常用语法

数据准备

# 创建索引,设置分片副本,配置映射
PUT /demo
{
  "settings":{
    "number_of_replicas": 1, 
    "number_of_shards": 3
  },
  "mappings":{
    "user":{
      "properties":{
        "name":{"type":"text"},
        "age":{"type":"integer"},
        "sex":{"type":"text"},
        "remark":{"type":"text"},
        "create_time":{"type":"date","format":"yyyy-MM-dd||yyyy/MM/dd||yyyy-MM-dd HH:mm:ss||epoch_millis"}
      }
    }
  }
}

# 查看 mapping
GET /demo/user/_mapping

# 批量新增数据
POST /demo/user/_bulk
{"index":{"_index":"demo","_type":"user","_id":1}}
{"name":"kevin","age":24,"sex":"男","remark":"我是kevin","create_time":"2020-05-04"}
{"index":{"_index":"demo","_type":"user","_id":2}}
{"name":"cao","age":23,"sex":"男","remark":"我是cao","create_time":"2020-05-03"}
{"index":{"_index":"demo","_type":"user","_id":3}}
{"name":"mr.cao","age":22,"sex":"男","remark":"我是mr.cao","create_time":"2020-05-02"}
{"index":{"_index":"demo","_type":"user","_id":4}}
{"name":"kevin","age":21,"sex":"男","remark":"我是kevin","create_time":"2020-05-02"}
{"index":{"_index":"demo","_type":"user","_id":5}}
{"name":"coco","age":21,"sex":"女","remark":"我是coco","create_time":"2020-05-04"}
{"index":{"_index":"demo","_type":"user","_id":6}}
{"name":"co","age":20,"sex":"女","remark":"我是co","create_time":"2020-05-03"}
{"index":{"_index":"demo","_type":"user","_id":7}}
{"name":"coco","age":19,"sex":"女","remark":"我是coco","create_time":"2020-05-02"}

# 查询测试
# 查询name为kevin
GET /demo/user/_search?q=name:kevin

# 查询name为kevin且以age倒序
GET /demo/user/_search?q=name:kevin&sort=age:desc

3.1 DSL语句校验查询是否正确

# 查询前先校验语句是否正确
GET /demo/user/_validate/query?explain
{
  "query":{
    "match":{
      "name":"kevin"
    }
  }
}

3.2 DSL基本用法

模糊查询时使用match,精准查询时使用term。

term query:直接对关键词准确查找,该查询只适合keyword、numeric、date。

term:查询某个字段中含有某个关键词的文档。
terms:查询某个字段中含有多个关键词的文档。

match query:对所查找的关键词进行分词,在根据分词匹配查找。

match_all:查询所有文档。
multi_match:指定多个字段。
match_phrase:短语匹配查询。

ES检索引擎会先分析查询字符串,从分析后的文本中构建短语查询,表示必须匹配短语中所有的分词,并保证各个分词的相对位置不变。

from:从第几条数据开始查询。

size:需要查询的个数。

sort:实现排序,desc降序,asc升序。

range:实现范围查询。(参数:from,to,include_lower,include_upper,boost)

include_lower:是否包含范围的左边界,默认true。
include_upper:是否包含范围的右边界,默认true。

wildcard:允许使用通配符*和?进行查询

*:表示0或者多个字符
?:表示任意一个字符  

fuzzy:实现模糊查询

value:查询的关键字
boost:查询的权值,默认值1.0
min_similarity:设置匹配的最小相似度,默认值0.5,对于字符串,取值0-1(包括0和1),对于数值,取值可能大于1,对于日期,取值为1d,1m等,1d为1天。
prefix_length:指明区分词项的共同前缀长度,默认0.
max_expansions:查询中的词项可以扩展的数目,默认可以无限大。

filter是不计算相关性的,同时可以cache,所以filter效率高于query。

范围过滤:

gte:>=(大于等于)
gt:&g
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值