文章目录
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1274e5674c6fc4507fc5e177ebb3f151.png)
前言
- 本文为es常见DSL搜索入门帖子
- 开始之前先贴个对应关系,方便各位理解
- 在es7+的版本中,是没有类型的概念的,所以,添加数据直接在索引中添加;
⭐请求es地址均为localhost:9200/{索引}/_search
,为了编写方便些,在下面的例子中会直接写请求体;
⭐搜索所有文档
{
"query": {
"match_all": {}
},
"size": 1 // size关键词为返回数据条数,不填写默认为10条
}
⭐根据指定字段倒序排列
{
"query": {
"match_all": {}
},
"sort": [
{
"patient_age": {
"order": "desc" // 根据用户年龄倒序排列
}
}
],
"size": 10, // size 与 from搭配起到分页的作用
"from": 1
}
⭐查询返回指定字段
{
"query": {
"match_all": {}
},
"_source": ["bill_no", "patient_age"], // 只返回订单号和用户年龄
"sort": [
{
"patient_age": {
"order": "desc"
}
}
],
"size": 10,
"from": 1
}
⭐范围查询(range)
{
"query": {
"range": {
"patient_age": { // 查询年龄大于1岁 小于10岁的用户
"gte": 1,
"lte": 10
}
}
}
}
⭐前缀查询(prefix)
{
"query": {
"prefix": {
"patient_name": {
"value": "李" // 查询姓李的用户
}
}
}
}
⭐组合查询(bool)
- bool 关键字: 用来组合多个条件实现复杂查询表达式
- must: 相当于 &&
- should: 相当于 ||
- must_not: 相当于 !=
以下表达式的意思为:
- 查询用户年龄(
patient_age
)在0-18岁之间 - 且不姓李的用户信息
- 并且按照用户年龄字段倒序排列
- 并且返回指定字段的用户信息
{
"query": {
"bool": {
"must": [
{
"range": {
"patient_age": {
"gte": 0,
"lte": 18
}
}
}
],
"must_not": [
{
"prefix": {
"patient_name": {
"value": "李"
}
}
}
]
}
},
"sort": [
{
"patient_age": {
"order": "desc"
}
}
],
"_source": [
"bill_no",
"patient_name",
"patient_age"
]
}
⭐高亮查询(term、highlight)
term
查询被用于精确值匹配,这些精确值可能是数字、时间、布尔或者那些 not_analyzed 的字符串;
{
"query": {
"term": {
"patient_name": {
"value": "李"
}
}
},
"highlight": {
"fields": {
"*": {}
}
}
}
在返回值中,符合条件的数据会被highlight标签包裹,并且有标签修饰,不过这个标签是可以通过es进行修改的;
"highlight": {
"patient_name": [
"<em>李</em>雪"
]
}
⭐ terms 查询
- terms 查询和 term 查询一样,但它允许你指定多值进行匹配;
- 如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件
{
"query": {
"terms": {
"patient_name": [ // 查询患者名字中包含 赵 钱 孙字符的文档
"赵",
"钱",
"孙"
]
}
}
}
⭐多字段查询(multi_match)
{
"query": {
"multi_match": {
"query": "山东",
"fields": [
"patient_address", // 这里为检索的字段
"address"
]
}
}
}