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