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.人工干预查询到的文档的权重(干预文档排序)

dsl语法_第1张图片

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

dsl语法_第2张图片

 查询结果处理:

排序

注:一旦进行排序则不会进行打分机制,以提高速度

1.按数值进行排序

dsl语法_第3张图片

#对查询结果进行排序
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "score": "desc"
    },
    {
      "price": "asc"
    }
  ]
}

 2.按坐标进行排序

dsl语法_第4张图片

#按经纬度距离进行排序
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "_geo_distance": {
        "location": {
          "lat": 31.034661,
          "lon": 121.612282
        },
        "order": "asc",
        "unit": "km"
      }
    }
  ]
}

分页 

1.分页查询

dsl语法_第5张图片

#分页查询
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "price": "asc"
    }
  ],
  "from": 0,
  "size": 20
}

 注:es支持的最大查询条数为10000条,如:初始条数为9991,每页10条将会报错,所以es不支持深度分页

深度分页的方法:

 分页总结:

dsl语法_第6张图片

 对搜索内容的高亮处理

原理

dsl语法_第7张图片

 dsl语法_第8张图片

#高亮查询,默认需要搜索字段与高亮字段一致
GET /hotel/_search
{
  "query": {
    "match": {
      "all": "如家"
    }
  },
  "highlight": {
    "fields": {
      "name": {
        "require_field_match": "false",
        "pre_tags": "",
        "post_tags": ""
      }
    }
  }
}

 

你可能感兴趣的:(es,java,es,dsl)