赞
踩
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排序查询、分页查询以及高亮查询的介绍和实例完成就到此结束啦~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。