> 文章列表 > dsl语法

dsl语法

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>"}}}
}