DSL 查询语法

文章介绍了Elasticsearch中的DSL查询语法,包括全文检索的match查询、multi_match的多字段查询、term的精确查询、range的范围查询以及geo_bounding_box和geo_distance的地理位置查询。还提到了复合查询如布尔查询和算分函数,以及搜索结果的排序、分页和高亮显示方法。
摘要由CSDN通过智能技术生成

DSL 查询语法

//学习b站资料整理笔记如下:

GET /索引库名字/_search
{
	"query":{
		"查询类型":{
			"字段名字Field""要查询的值"
		}
	}
}
//查询类型 match / match_all / multi_match
match查询:全文检索查询,对用户输入的内容分词,然后倒排索引库检索
GET /索引库名字/_search
{
  "query": {
    "match": {
      "FIELD": "TEXT"
    }
  }
}
//可以在建立索引库的时候,字段使用‘copy to’语法,可以聚合索引
multi_match 可以同时查询多个字段
GET /索引库名字/_search
{
  "query": {
    "multi_match": {
      "query": "",
      "fields": []
    }
  }
}
Eg:
GET /hotel/_search
{
  "query": {
    "multi_match": {
      "query": "地铁",
      "fields": ["name","business"]
    }
  }
}// 查询name,business中包含地铁的,返回结果--不建议非常多的字段查询
精确查询,一般是查找keyword,数值,日期,Boolean等类型字段,不会对搜索条件分词

t e r m 根据词条精确值查询 term 根据词条精确值查询 term根据词条精确值查询

r a n g e 根据值的范围查询 range 根据值的范围查询 range根据值的范围查询

//term 查询
GET /索引库名字/_search
{
  "query": {
    "term": {
      "FIELD指定查询字段": {
        "value": "想要查询的值"
      }
    }
  }
}

//range 查询
GET /索引库名字/_search
{
  "query": {
    "range": {
      "FIELD1": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}// 10<=FIELD1<=20(gte,lte), 10<FIELD1<20(gt,lt)
经纬度查询,使用场景:酒店查找,呼叫滴滴
geo_bounding_box: 查询geo_point值落在某个矩形范围的所有文档
GET /索引库名字/_search
{
  "query": {
    "geo_bounding_box":{
      "FIELD1":{
        "top_left":{
          "lat":31.1,
          "lon":121.5
        },
        "bottom_right":{
          "lat":30.9,
          "lon":121.7
        }
      }
    }
  }
}
geo_distance: 指定到中心点小于某个距离值的所有文档
GET /索引库名字/_search
{
  "query": {
    "geo_distance":{
      "distance":"15km",
      "FIELD1": "31.21,121.5"
    }
  }
}
复合查询:可以将其他简单的查询组合起来,实现更复杂的搜索逻辑

function score:算分函数查询,可以控制文档相关性算分,控制文档排名。比如百度竞价

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

布尔查询, Boolean Query,一个或者多个子句的组合

must:必须匹配每个子查询,类似“与”

should:选择性匹配子查询,类似于“或”

must_not:必须不匹配,不参与算分,类似于“非”

filter:必须匹配,不参与算分

搜索结果处理

支持对搜索结果排序,默认是根据相关度算分(score)来排序,可以排序的字段类型有:keyword类型,数值类型,地理坐标类型,日期类型等

GET /索引库名字/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "_geo_distance": {
        "location": {
          "lat": 31.014,
          "lon": 121.612
        },
        "order": "desc"//asc
      }
    }
  ]
}
分页(ES默认只返回top10的数据,查询更多就需要分页参数了)

通过修改from,size参数控制返回的分页结果

ES 是分布式的,会有深度分页的问题,对内存和CPU的消耗高,所以设定结果集查询的上限为10000

GET /索引库名字/_search
{
  "query": {
    "match_all": {},
  },
  "from": 50,//分页开始位置,默认为0
  "size": 200,//期望获取的文档总数
  "sort": [
    {
      "price": {
        "order": "asc"
      }
    }
  ]
}

关于深度分页,ES有两种解决方案,

search after,分页时需要排序,原理是从上一次排序值开始,查询下一页数据,官方推荐

scroll:原理将排序数据形成快照,保存在内存。官方不推荐

处理结果之 高亮, 把搜索结果中的关键收缩字突出显示

1.将搜索结果中的关键字用标签标记出来

2.在页面中给标签添加css样式

GET /索引库名字/_search
{
  "query": {
    "match": {
      "all": "如家"//搜索字段
    }
  },
  "highlight": {
    "fields": {
      "name": {//“name”这个字段中
        "pre_tags": "<em>",//标记高亮字段的前置标签
        "post_tags": "<em>",//标记高亮字段的后置标签
        "require_field_match": "false"
      }
    }
  }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值