dsl语法
查询
1.查询所有(默认有分页查询)
#查询所有
GET /hotel/_search
{"query": {"match_all": {}}
}
2.match查询(条件查询)-----包含四川和外滩的信息,信息匹配度越高越靠前,两者存在一个也可以
#match查询(条件查询)
GET /hotel/_search
{"query": {"match": {"all": "四川外滩"}}
}
3.multi_match查询,多条件查询
#multi_match查询(多条件查询,满足其一即可)
GET /hotel/_search
{"query": {"multi_match": {"query": "外滩如家","fields": ["brand","name","business"]}}
}
4.term查询(精准查询)
#term查询精准查询
GET /hotel/_search
{"query": {"term": {"city": {"value": "上海"}}}
}
5.range查询(精准查询范围值一般用于价格)
gte:大于等于 gt:大于 lte:小于等于 lt:小于
#range查询(精准查询范围值一般用于价格)
GET /hotel/_search
{"query": {"range": {"price": {"gte": 100,"lte": 300}}}
}
6.经纬度查询(地理位置查询)distance查询
#distance查询(地理查询)(以一个点为中心点一定距离内的数据————一般用作搜索附近的)
GET /hotel/_search
{"query": {"geo_distance":{"distance":"15km","location":"31.21,121.5"}}
}
7.人工干预查询到的文档的权重(干预文档排序)
#function_score
GET /hotel/_search
{"query": {"function_score": {"query": {"match": {"all": "外滩"}},"functions": [{"filter": {"term": {"brand": "如家"}},"weight": 10}],"boost_mode": "sum"}}
}
8.复合查询 Boolean Query
#复合查询 Boolean Query
GET /hotel/_search
{"query": {"bool": {"must": [{"match": {"name": "如家"}}],"must_not": [{"range": {"price": {"gt": 400}}}],"filter": [{"geo_distance": {"distance": "10km","location": "31.21,121.5"}}]}}
}
查询结果处理:
排序
注:一旦进行排序则不会进行打分机制,以提高速度
1.按数值进行排序
#对查询结果进行排序
GET /hotel/_search
{"query": {"match_all": {}},"sort": [{"score": "desc"},{"price": "asc"}]
}
2.按坐标进行排序
#按经纬度距离进行排序
GET /hotel/_search
{"query": {"match_all": {}},"sort": [{"_geo_distance": {"location": {"lat": 31.034661,"lon": 121.612282},"order": "asc","unit": "km"}}]
}
分页
1.分页查询
#分页查询
GET /hotel/_search
{"query": {"match_all": {}},"sort": [{"price": "asc"}],"from": 0,"size": 20
}
注:es支持的最大查询条数为10000条,如:初始条数为9991,每页10条将会报错,所以es不支持深度分页
深度分页的方法:
分页总结:
对搜索内容的高亮处理
原理
#高亮查询,默认需要搜索字段与高亮字段一致
GET /hotel/_search
{"query": {"match": {"all": "如家"}},"highlight": {"fields": {"name": {"require_field_match": "false","pre_tags": "<em>","post_tags": "</em>"}}}
}