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