利用kibana可视化DevTools界面实现ElasticSearch文档数据的地理位置查询、sort排序查询、分页查询以及高亮查询

1.利用bool查询实现地理位置的查询

首选外面要知道bool查询有几种逻辑关系?
must:必须匹配的条件,可以理解为“与”(参与算分)
should:选择性匹配的条件,可以理解为“或”(参与算分)
must_not:必须不匹配的条件,不参与打分
filter:必须匹配的条件,不参与打分

实例:搜索名字包含“如家”,价格不高于400,在坐标31.21,121.5周围10km范围内的酒店

GET /hotel/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "如家"
          }
        }
      ],
      "must_not": [
        {
          "range": {
            "price": {
              "gt": 400
            }
          }
        }
      ],
      "filter": [
        {
          "geo_distance": {
            "distance": "10km",
             "location": {
              "lat": 31.21,
              "lon": 121.5
            }
          }
        }
      ]
    }
  }
}

2.sort排序查询

实例1:利用sort对所有酒店进行排序(先按评分进行降序,如果有相同评分,就按价格升序来排序),自己自定义来排序的话,之前默认的按score(分数)来排序就无效了,也就是排序查询的结果中_score的值为null

GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "score":  "desc"
    },
    {
      "price": "asc"
    }
  ]
}

实例2:找到121.612282,31.034661周围的酒店,按距离升序排序

GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "_geo_distance": {
        "location": {
          "lat": 31.034661,
          "lon": 121.612268
        },
        "order": "asc",
        "unit": "km"
      }
    }
  ]
}

3.分页查询

es提供的分页查询有三种,其中两种最为常用,另外一种已经被官方不推荐使用,下面介绍一下最为常用的两种分页查询的方式吧~

方式一: from + size:
优点:支持随机翻页
缺点:深度分页问题,默认查询上限(from + size)是10000
场景:百度、京东、谷歌、淘宝这样的随机翻页搜索
方式二:after search:
优点:没有查询上限(单次查询的size不超过10000)
缺点:只能向后逐页查询,不支持随机翻页
场景:没有随机翻页需求的搜索,例如手机向下滚动翻页

下面就以from+size的方式作为实例:

分页查询(form:这一页开始的值 size:这一页的大小),这里是查询第30条到50条的数据

GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "price": "asc"
    }
  ],
  "from": 30,
  "size": 20
}

 4.高亮查询

默认情况下,es搜索字段必须与高亮字段一致,想要不一致就要改require_field_match的值为false

实例:查询以all为字段集合包含“如家”的数据,并且在name字段里面对“如家”进行高亮处理,注意这里的all包含了多个字段,不单单只有name这个字段

GET /hotel/_search
{
  "query": {
    "match": {
      "all": "如家"
    }
  },
  "highlight": {
    "fields": {
      "name": {
        "require_field_match": "false"
      }
    }
  }
}

至此,ElasticSearch文档数据的地理位置查询、sort排序查询、分页查询以及高亮查询的介绍和实例完成就到此结束啦~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值