DSL查询语法

在这里插入图片描述

  • 查询所有
GET /hotel/_search
{
  "query": {
    "match_all": {}
  }
}
  • 全文检索查询
推荐使用上面这种 因为我把所查询的字段copy到了一个字段all里面,
只需要查询一个字段即可
GET /hotel/_search
{
  "query": {
    "match": {
      "all": "外滩如家"
    }
  }
}

# 这两个效果一样
# 查询的字段越多,性能越差
GET /hotel/_search
{
  "query": {
    "multi_match": {
      "query": "如家",
      "fields": ["brand","name","business"]
    }
  }
}
  • 精确查询
    必须符合条件的才被查询出来
# brand字段必须为如家的才能被查询出来
GET /hotel/_search
{
  "query": {
    "term": {
      "brand": {
        "value": "如家"
      }
    }
  }
}

# 范围查找 gt是大于 gte是大于等于 lte和le也是一样
# 可以是数值也可以是日期
GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "gt": 249,
        "lte": 3000
      }
    }
  }
}
  • 地理查询
GET /hotel/_search
{
  "query": {
    "geo_distance":{
       # 表示附近距离
      "distance":"5km",
      # 这个地址的经纬度 的5km范围内
      "location":"31.21,121.5"
    }
  }
}

FunctionScoreQuery
在这里插入图片描述

GET /hotel/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
        // 搜索如家的品牌
          "brand": "如家"
        }
      },
      "functions": [
        {
        	// 筛选出品牌为如家的
          "filter": {"term": {"brand": "如家"}},
          // 并且加权重
          "weight": 10
        }
      ],
      // 以相加的方式 
      "boost_mode": "sum"
    }
  }
}

复合查询 Boolean Query
布尔查询是一个或者多个查询子句的组合。子查询的组合方式有:

  • must : 必须匹配每个子查询,类似与&&
  • should:选择性匹配子查询,类似或||
  • must_not :必须不匹配,不参与算分,类似 非 !
  • fukter: 必须匹配与must相似,但不参与算分
    在复合查询中除了要收拾
GET /hotel/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
          "name": {
            "value": "如家"
            }
          }
        }
      ],
      "must_not": [
        {
          "range": {
          "price": {
            "gte": 400
          }
        }}
      ],
     "filter": [
       {"geo_distance": {
         "distance": "10km",
         "location": {
           "lat": 31.21,
           "lon": 121.5
         }
       }}
     ]
    }
  }
}

排序
一但排序就没有打分

GET /hotel/_search
# 评分按降序 如果评分相同就按价格升序
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "score": {
        "order": "desc"
      }
      ,
      "price": {
        "order": "asc"
      }
    }
  ]
}

# 地理排序
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "_geo_distance": {
      # 坐标位置
        "location": {
          "lat": 31.034661,
          "lon": 121.612282
        },
        "order": "asc", # 升序排序
        "unit": "km" # 单位km
      }
    }
  ]

分页
在这里插入图片描述
高亮

# 默认就是高亮就是em标签如果想要其他的标签可以写pre 和 post 
# 默认情况下 高亮的字段要和检索的字段名一致 如果不需要这个规则可以修改
GET /hotel/_search
{
  "query": {
    "match": {
      "all": "如家"
    }
  },
  "highlight": {
    "fields": {
      "name": {
        "pre_tags": "<em>",
        "post_tags": "</em>",
        "require_field_match": "false"
      }
    }
  }
}

查询出来的结果
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值