网站首页 > 博客文章 正文
DSL分类
- 查询所有数据
- 全文检索(full text ): 查询内容由分词器分词后,去倒序索引库查询。
match_query
multi_match_query
- 精确查询:根据词条值精确查找数据。
- 地理查询:根据经纬度。
- 复合查询:可以将上述条件组合起来,一起查询。
查询语法:
GET /索引库名称/_search
{
"query": {
"查询类型": {
"查询条件": "条件值"
}
}
}
全文检索查询
match : 单字段查询
GET /索引库名称/_search
{
"query": {
"match": {
"要查询的字段" : "要查询的内容"
}
}
}
multi_match : 多字段查询
GET /索引库名称/_search
{
"query":{
"multi_match": {
"query": "要查询的内容",
"fields": ["查询字段1","查询字段2"]
}
}
}
精准查询
精准查询一般查找keyword、数值、日期、boolean等类型字段。
term : 查询内容不分词
GET /索引库名称/_search
{
"query" : {
"term" : {
"查询字段" : {
"value": "查询的值"
}
}
}
}
range : 范围查询
GET /索引库名称/_search
{
"query" : {
"range": {
"查询字段": {
"gte" : 值1, //大于等于
"lte" :值2 //小于等于
}
}
}
}
地理坐标查询
纬线用来表示南北方向,经线用来表示东西方向。
矩形范围查询
geo_bounding_box : 查询坐标所在某个矩形内的所有文档。
GET /索引库名称/_search
{
"query": {
"geo_bounding_box": {
"查询的字段" : {
"top_left" : {
"lat" : 纬度 ,
"lon" : 经度
},
"bottom_right": {
"lat" : 纬度,
"lon": 经线
}
}
}
}
}
附近查询
geo_distance: 查询指定中心范围内的所有文档
GET /索引库名称/_search
{
"query" : {
"geo_distance": {
"distance" : "半径范围",
"查询字段": "经度 , 纬度"
}
}
}
复合查询
复合(compound)查询: 组合简单查询,实现复杂逻辑。
function score: 算分函数查询。控制分档排名
bool query: 布尔查询,利用逻辑关系组合其它查询,实现复杂查询
算分函数查询
GET /索引库名称/_search
{
"query": {},
"functions" : [{
"filter" : {},
"weight": 权重值
}],
"boost_mode" : 加权模式
}
function score查询四部分:
原始查询: query部分,基于BM25算法。
过滤条件: filter 部分,符号条件的文档重新算法
算分函数: 符合filter条件的文档,根据函数做运算。
四种函数:
weight: 函数结果是场量
field_value_factor: 文档中的某个字段作为函数结果
random_score: 随机数作为函数结果
script_score: 自定义算法函数算法
运算模式: 算分函数、原始查询相关性算分,两者之间的运算方法。
multiply: 相乘
replace: 用function score替换query score
其他,sum,avg,max,min
布尔查询
子查询的组合方式:
must: 类似 与
should:类似 或
must_not:类似 非
filter: 必须匹配,不参与算法
GET /索引库名称/_search
{
"query": {
"bool": {
"must":[
],
"should": [
],
"must_not": [
],
"filter": [
]
}
}
}
排序
es默认排序是根据相关度算分,也支持自定义方式对搜索结果排序。
可以排序的字段有:keyword、数值类型、地理坐标、日期等。
普通字段排序
GET /索引库名称/_search
{
"query": {
"match_all" : []
},
"sort": [
{
"排序字段" : "desc" //desc 降序 asc 升序
}
]
}
地理坐标排序
GET /indexName/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"_geo_distance" : {
"字段": "纬度,经度", //文档字段,目标坐标
"order": "asc", // 排序方式 升序
"unit": "km" //排序单位
}
}
]
}
分页
基本分页
GET /hotel/_search
{
"query": {
"match_all": {}
},
"from" : 0, //分页开始位置
"size" : 10, //获取文档数量
"sort":[
{"price": "asc"}
]
深度分页
单系统影响不大,但是集群影响比较严重,牵扯到数据的汇总。
汇总数据过多,对内存和CPU会产生非常大的压力,因此elasticsearch会禁止from+ size 超过10000的请求。
针对深度分页,ES两种解决方案:
search after: 分页时需要排序,原理,从上一次排序的值开始,查询下一页的数据。
scroll: 原理排序后文档id形成快照,保存到内存。官方不推荐使用。
小结
分页查询的常见实现方案以及优缺点:
- from + size:
- 优点:支持随机翻页
- 缺点:深度分页问题,默认查询上限(from + size)是10000
- 场景:百度、京东、谷歌、淘宝这样的随机翻页搜索
- after search:
- 优点:没有查询上限(单次查询的size不超过10000)
- 缺点:只能向后逐页查询,不支持随机翻页
- 场景:没有随机翻页需求的搜索,例如手机向下滚动翻页
- scroll:
- 优点:没有查询上限(单次查询的size不超过10000)
- 缺点:会有额外内存消耗,并且搜索结果是非实时的
- 场景:海量数据的获取和迁移。从ES7.1开始不推荐,建议用 after search方案。
高亮
GET /hotel/_search
{
"query": {
"match": {
"FIELD": "TEXT" // 查询条件,高亮一定要使用全文检索查询
}
},
"highlight":{
"fields":{
"高亮字段":{
"pre_tags" : "<em>",
"post_tags" : "</em>"
}
}
}
}
注意:
对非搜索字段高亮,则需要添加一个属性:required_field_match=false
没有高亮的情况:
搜索的条件没有关键字。
高亮字段跟搜索字段不一致。
总结
DSL查询语句:
query: 查询条件
from和size: 分页
sort: 排序
highlight: 高亮条件
猜你喜欢
- 2024-10-24 持久层框架JPA与Mybatis该如何选型
- 2024-10-24 hibatis--mybatis,自动生成SQL, 通用Mapper, 通用Dao
- 2024-10-24 Elasticsearch 6.0.0官方参考指南翻译
- 2024-10-24 推荐一个高效美观易用的服务器运维工具
- 2024-10-24 Java 操作之RestHighLevelClient查询详解
- 2024-10-24 如何在 Elasticsearch 上应用机器学习排序插件
- 2024-10-24 「开源资讯」Apache Solr 8.6.0 发布,Java 全文搜索服务器
- 2024-10-24 最轻量级的Kubernetes云原生日志框架Loki
- 2024-10-24 ElasticSearch学习系列 - (3) Python操作es
- 2024-10-24 全功能orm工具sorms 1.0.10 发布,合使用Spring,Spring boot用户
你 发表评论:
欢迎- 05-30springboot 集成redisson 以及分布式锁的使用
- 05-30去哪儿技术面:10亿数据如何最快速插入MySQL?
- 05-30redis介绍
- 05-30redission YYDS
- 05-30手把手教你springboot集成mybatis
- 05-30mybatis根据表逆向自动化生成代码:自动生成实体类、mapper文件
- 05-30越来越大的微信小程序
- 05-30SpringBoot之数据访问——访问SQL数据库!
- 422℃用AI Agent治理微服务的复杂性问题|QCon
- 420℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 401℃初次使用IntelliJ IDEA新建Maven项目
- 401℃Maven技术方案最全手册(mavena)
- 394℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 390℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 389℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 384℃IT全明星|IntelliJ IDEA学习笔记(四、idea中怎么创建maven项目)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)