DSL语法

简介: DSL语法

学习黑马- SpringCloud微服务技术栈项目的分布式搜索中DSL语法章节自行整理的笔记,方便日后的重构。

项目涉及技术

1.知识点是按照集数依次整理,方便日后回来查找。

2.考虑到不是固定的联网方式,时而WiFi,时而热点,配置静态IP会导致每次网络变更后都需要重新配置,所以虚拟机使用的动态路由,当需要运行相关程序时,IP变化,只需要修改测试时初始化的RestHighLevelClient即可。

3.将代码路径列举主要是为后续审查。

4.RestClient操作索引库的代码路径E:\微服务\实用篇\day05-Elasticsearch01\资料\hotel-demo

实用篇

  1. DSL查询语法(P101)
  2. 查询所有:查询出所有数据,一般测试用。例如:match_all
  3. 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:matchmulti_match;两者区别match根据一个字段查询,multi_match根据多个字段查询;参与查询的字段越多,查询性能越差。
  4. 精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:idsrangeterm
  5. 地理(geo)查询:根据经纬度查询。例如:geo_distancegeo_bounding_box
  6. 复合(compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。例如:Boolean Queryfunction_score
  7. 相关性打分算法(P105)
  8. TF-IDF:在elasticsearch5.0之前,会随着词频增加而越来越大
  9. BM25:在elasticsearch5.0之后,会随着词频增加而增大,但增长曲线会趋于水平。
# 查询所有
GET /hotel/_search
{
  "query": {
    "match_all": {}
  }
}
# 全文检索 -- match查询(效率高)
GET /hotel/_search
{
  "query": {
    "match": {
      "all": "外滩如家"
    }
  }
}
# 全文检索 -- multi_match
GET /hotel/_search
{
  "query": {
    "multi_match": {
      "query": "外滩如家",
      "fields": ["brand", "name", "business"]
    }
  }
}
# 精确查询 -- term查询 
GET /hotel/_search
{
  "query": {
    "term": {
      "city": {
        "value": "上海"
      }
    }
  }
}
# 精确查询 -- range查询  范围
GET /hotel/_search
{
  "query": {
    "range": {
      "price": {
        "gte": 100,
        "lte": 300
      }
    }
  }
}
# 地理查询 -- distance查询
GET /hotel/_search
{
  "query": {
    "geo_distance": {
      "distance": "2km",
      "location": "31.21, 121.5"
    }
  }
}
# 复合查询 -- function_score   参加打分
# 给“如家”这个品牌的酒店靠前一点
GET /hotel/_search
{
  "query": {
    "function_score": {
      "query": {
        "match": {
          "all": "外滩"
        }
      },
      "functions": [    //算分函数
        {
          "filter": {    //条件
            "term": {
              "brand": "如家"
            }
          },
          "weight": 10   //算分权重
        }
      ],
      "boost_mode": "sum"  //加权分式
    }
  }
}
# 复合查询 -- Boolean Query 
# must:必须匹配的条件,可以理解为“与”
# should:选择性匹配的条件,可以理解为“或”
# must_not:必须不匹配的条件,不参与打分 - 提高效率
# filter:必须匹配的条件,不参与打分 - 提高效率
# 搜索名字包含“如家”,价格不高于400,在坐标31.21,121.5周围10km范围内的酒店
GET /hotel/_search
{
  "query": {
    "bool": {
      "must": [
        {"match":{"name": "如家"}}
      ],
      "must_not": [
        {"range":{"price":{"gt": 400}}}
      ],
      "filter":[
        {"geo_distance": {
          "distance": "20km",
          "location": {
            "lat": 31.21,
            "lon": 121.5
          }
        }}
      ]
    }
  }
}
  1. 搜索结果处理(P108)
  2. 排序 – 经过排序就不做相关性打分,提高查询效率。
  3. 分页–文档全部查询,然后截取当前文档的位置+显示的文档数;默认top10,查询更多修改参数-from、size。
  4. 深度分页问题–ES集群处理的时候,是将所有节点的结果聚合,在内存中排序,在选中相应的文档;搜索页数过深,或结果集(from+size)越大,对内存和CPU的消耗也越高。
  5. es设定结果集上限为10000。
  6. 分页方式(P109)
  7. from + size–优点:支持随机翻页;缺点:深度分页问题。场景:百度、谷歌、京东等的随机翻页搜索。
  8. after search–优点:没有查询上限(单词查询的size不超过10000),缺点:只能向后逐页查询,不支持随机翻页。场景:没有随机翻页需求的搜索,例如手机向下翻页。
  9. scroll:优点:没有查询上限(单词查询的size不超过10000),缺点:会额外消耗内存,搜索结果是非实时的,场景:海量数据的获取和迁移。(已弃用)
  10. 高亮–将搜索结果中把搜索关键字突出显示。
# 对酒店数据按照用户评价降序排序,评价相同的按照价格升序排序
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "score": "desc"
    },
    {
      "price": "asc"
    }
  ]
}
# 对酒店数据数据按照你的位置坐标的距离升序排序
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "_geo_distance": {
        "location": {
          "lat": 31.034661,
          "lon": 121.612282
        },
        "order": "asc",
        "unit": "km"
      }
    }
  ]
}
# 分页查询 -- from-分页当前的位置  size-显示文档的总数
GET /hotel/_search
{
  "query": {
    "match_all": {}
  },
  "sort":[
    {
      "price": "asc"
    }
  ],
  "from": 0,
  "size": 10
}
# 高亮查询,默认情况下,ES搜索字段必须与高亮字段一致,可以将"require_field_match":"false"-关闭搜索字段和高亮字段匹配
GET /hotel/_search
{
  "query": {
    "match": {
      "all": "如家"
    }
  },
  "highlight":{
    "fields":{
      "name":{
        "require_field_match":"false"
      }
    }
  }
}

1.RestClient查询文档–利用JavaRestClient查询文档。(P111)

2.基本步骤–创建SearchRequest对象-准备Request.source(),其中QueryBuilders来构建查询条件,再传入query()方法-发送请求,得到结果-解析结果(参考JSON结果,从外到内,逐层解析)。

3.全文检索 – 要构建条件只需要QueryBuilders。

4.高亮–高亮结果解析是参考JSON结果,逐层解析。

->微服务技术栈DSL语法课程视频

https://www.bilibili.com/video/BV1LQ4y127n4?p=100

<-

记录每一个学习瞬间

目录
相关文章
|
Ubuntu Linux 网络安全
ubuntu22.04操作系统的安装
ubuntu22.04操作系统的安装
1798 0
ubuntu22.04操作系统的安装
微信文件传输助手文件夹在哪?一起来找找
  微信文件传输助手是微信电脑版与手机微信之间相互传输图片等文件的好工具,但很多童鞋都找不到微信文件传输助手文件夹在哪,就让我们一起找找吧   1.先说说手机微信文件传输助手文件夹在哪吧   文件夹路径为/Tencent/MicroMsg/Download/     2.
4620 0
|
人工智能 程序员 开发者
欢迎加入通义灵码繁星计划,成为校园大使
「通义灵码繁星计划」希望为每位开发者送一个智能编码助手,为职场、校园开发者提供不同维度的产品免费使用、体系化课程学习、人才认证考试等权益,同时长期建设通义灵码MVP、校园大使体系,激活创新潜力,培养创新明星,点亮追梦之旅。
1016 36
|
架构师 Java 测试技术
一文搞透高并发指标(QPS、TPS、吞吐量等)
详解高并发场景下的QPS、TPS、RT及吞吐量等关键性能指标,帮助理解系统性能评估的核心概念。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文搞透高并发指标(QPS、TPS、吞吐量等)
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
961 1
|
测试技术 芯片
飞针测试机在贴装线路板应用
【8月更文挑战第26天】飞针测试机在PCBA中的应用涵盖检测开路与短路、测试元件电气性能、检查元件安装正确性、识别缺失或损坏的元件,并适用于小批量和多品种生产,有助于提高产品质量和可靠性。它能提供详细故障信息,便于问题定位与反馈,但测试速度较慢,需根据生产规模和质量要求选择合适的测试设备。
257 1
|
Shell C语言 SoC
计基2—RISCV指令集介绍与汇编
计基2—RISCV指令集介绍与汇编
712 1
|
XML JSON JavaScript
JSON简介
JSON简介
470 0
|
XML 自然语言处理 IDE
一杆到底:DSL 领域特定语言
一、DSL了解1、DSL介绍DSL(Domain Specific Language)是针对某一领域,具有受限表达性的一种计算机程序设计语言。 常用于聚焦指定的领域或问题,这就要求 DSL 具备强大的表现力,同时在使用起来要简单。说到DSL,大家也会自然的想到通用语言(如Java、C等)。为什么没有一种语言同时 兼具『简洁』和『业务表达』能力呢?从信息论本质上来讨论这个问题,每个语言的程序都可以抽
19154 0
一杆到底:DSL 领域特定语言
|
设计模式 算法 编译器
【C++ 泛型编程 入门篇】C++ 元编程 :模板结构体的的使用教程
【C++ 泛型编程 入门篇】C++ 元编程 :模板结构体的的使用教程
854 1

热门文章

最新文章