(六)Java操作elasticSearch(2)

2023-10-30

Java操作elasticSearch(2)

一、DSL查询文档:

0、DSL:

DSL 是基于json风格的查询语句,用json描述我们的查询条件,然后发送给es服务,es服务根据这些查询条件返回结果。

1、DSL查询分类

1.1 DSL Query的分类
Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括:

  • 查询所有
  • 全文检索查询
  • 精准查询
  • 地理坐标查询
  • 组合查询

1.2 查询的基本语法:
在这里插入图片描述

2、全文检索查询

2.1 全文检索(full text)查询:
利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如:
match_query
multi_match_query
2.2 查询的基本语法:
在这里插入图片描述在这里插入图片描述

3、精准查询

3.1 精确查询:
根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:
ids
range:根据数值范围查询,可以是数值、日期的范围
term:根据词条精确匹配,一般搜索keyword类型、数值类型、布尔类型、日期类型字段
3.2 查询的基本语法:
在这里插入图片描述

4、地理坐标查询

4.1 地理(geo)查询:
根据经纬度查询。例如:
geo_distance:查询到指定中心点小于某个距离值的所有文档
geo_bounding_box:查询geo_point值落在某个矩形范围的所有文档
4.2 查询的基本语法:
在这里插入图片描述在这里插入图片描述

5、组合查询

5.1 复合(compound)查询:
复合查询可以将上述各种查询条件组合起来,合并查询条件。例如:
bool
function_score:算分函数查询,可以控制文档相关性算分,控制文档排名
5.2 相关性得分算法:
ES5.0版本以前:使用TF-IDF算法
在这里插入图片描述ES5.0版本以后:使用BM25算法
在这里插入图片描述
在这里插入图片描述5.3 手动干预相关性得分:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述5.4 bool复合查询:
布尔查询是一个或多个查询子句的组合。子查询的组合方式有:
must:必须匹配每个子查询,类似“与”
should:选择性匹配子查询,类似“或”
must_not:必须不匹配,不参与算分,类似“非”
filter:必须匹配,不参与算分,尽量使用这个而不使用must,因为参与算分会降低查询的性能;
在这里插入图片描述在这里插入图片描述

二、搜索结果的处理:

0、搜索结果处理整体语法:

在这里插入图片描述

1、排序:

1.1 elasticsearch排序:
支持对搜索结果排序,默认是根据相关度算分(_score)来排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。使用指定字段,则es会放弃打分,从而提升一些查询效率。
1.2 语法格式:
在这里插入图片描述

2、分页:

2.1 es分页规则:
elasticsearch 默认情况下只返回top10的数据。而如果要查询更多数据就需要修改分页参数了。
elasticsearch中通过修改from、size参数来控制要返回的分页结果:
2.2 es分页语法:
在这里插入图片描述2.3 es分页存在的问题以及解决方案:
由于es是采用倒排索引,它的结构是不利于做分页的,所以它采用的是逻辑分页,也就是比如说查询990-1000的数据,则是先查前1000的数据,然后截取最后10条数据。这种在单点环境下还行得通,但是如果是集群部署,es则会对数据进行拆分,放到不同的机器上,如下图:在这里插入图片描述针对深度分页,ES提供了两种解决方案:
search after: 分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。官方推荐使用的方式。
scroll: 原理将排序数据形成快照,保存在内存。官方已经不推荐使用。

一般会从业务层面禁止深度分页。如最多查询100页。

在这里插入图片描述

3、高亮:

3.1 高亮状态:
就是在搜索结果中把搜索关键字突出显示
原理:

  • 将搜索结果中的关键字用标签标记出来
  • 在页面中给标签添加css样式

3.2 高亮语法格式:
在这里插入图片描述在这里插入图片描述

三、RestClient查询文档:

1、快速入门:

查询的基本步骤是:

  1. 创建SearchRequest对象
  2. 准备Request.source(),也就是DSL。
    2.1 QueryBuilders来构建查询条件 (要构建查询条件,只要记住一个类:QueryBuilders)
    2.2 传入Request.source() 的 query() 方法
  3. 发送请求,得到结果
  4. 解析结果(参考JSON结果,从外到内,逐层解析)

在这里插入图片描述
在这里插入图片描述RestAPI中其中构建DSL是通过HighLevelRestClient中的resource()来实现的,其中包含了查询、排序、分页、高亮等所有功能:
在这里插入图片描述RestAPI中其中构建查询条件的核心部分是由一个名为QueryBuilders的工具类提供的,其中包含了各种查询方法:
在这里插入图片描述

2、match查询:

全文检索的match和multi_match查询与match_all的API基本一致。差别是查询条件,也就是query的部分。同样是利用QueryBuilders提供的方法:
在这里插入图片描述

3、精确查询:

精确查询常见的有term查询和range查询,同样利用QueryBuilders实现:
在这里插入图片描述

4、复合查询:

精确查询常见的有term查询和range查询,同样利用QueryBuilders实现:
在这里插入图片描述

5、搜索结果处理:排序、分页、高亮:

所有搜索DSL的构建,记住一个API:SearchRequest的source()方法。

搜索结果的排序和分页是与query同级的参数,对应的API如下:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

四、案例:

1、让指定的记录在结果集中置顶:

可以给需要置顶的文档添加一个标记,然后利用function score 给带有标记的文档增加权重;
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(六)Java操作elasticSearch(2) 的相关文章

随机推荐

  • LinearLayer

    线性层的作用 类似于这边荧光绿的两层 就是fully connected layer 将1 1 4096的向量 变成1 1 1000的向量 代码示例 import torch import torchvision from torch im
  • dwr 使用 callback 多个参数(间接方法)

    dwrInvokeDataClaimAction findSupplierByName payee callback function returnData bringOutSupplierCallback returnData arg1
  • 【Redis】List类型和底层原理

    文章目录 List类型 1 List介绍 1 1常用命令 2 List底层实现 3 ziplist剖析 3 1ziplist结构 3 2创建一个空的ziplist 3 3ziplist的元素节点结构 3 4ziplisqt的连锁更新 3 5
  • Java 集合(List与LinkedList)接口详解

    List接口 List接口的定义 List interface List extends Collection 通过观察List接口的定义发现其继承得是Collection接口 List Set Queue接口继承的都是Collection
  • [持续开源中]用2000元左右做水下机器人

    1 水下机器人功能 1 平稳的运动控制 2 高清视频 3 定深悬停 巡航 2 相关技术 2 1 PC上位机 1 C Winform MVC 现有 2 C MAUI MVVM Socket 开发中 2 2 下位机 水下机器人 2 2 1 So
  • 最长连续子序列的起始位置

    用结构体保存结果 注意的是最长连续子序列需要的是连续 所以dp的状态方程别写错了 include
  • inotify_init使用

    用于监控文件 目录的修改创建删除等操作 也可以配合epoll使用 include
  • Upload-Labs-Windows Pass-01

    题目 解题 步骤1 上传文件 上传一句话木马 编辑文件a php 内容为 直接上传的话 会提示错误 题目要求选择图片格式上传 文件名改为a jpg 内容为 然后通过burp suite来修改上传文件名字 步骤2 改文件名 把a jpg改为a
  • 组件库技术选型总结

    Monorepo Multirepo 架构 Multirepo指的是将模块分为多个仓库 每个团队都拥有自己的仓库 他们可以使用自己的构建流程 代码规范等 但是同时也会存在很多问题 比如模块中间如果存在相互依赖 就必须到目标仓库里进行bug修
  • android动态权限的源码解析

    android 动态权限 android权限的类型 在android9 0中定义了很多权限 如下
  • LeetCode-七进制数、最小高度二叉搜索树

    只是为了记录每天的练习 要好好加油啊呜呜呜现在的我还太拉了 思路很直接啊 就是转进制 数字转字符串 class Solution public string convertToBase7 int num if num 0 特殊情况 retu
  • HelloSpring---第一个spring项目

    1 Spring概述 1 1 简介 Spring 春天 gt 给软件行业带来了春天 2002年 Rod Jahnson首次推出了Spring框架雏形interface21框架 2004年3月24日 Spring框架以interface21框
  • websocket php连接数,swoole websocket协程服务端 因为客户端连接数量过多崩溃

    问题描述 websocket 携程风格的服务端 同时300多个客户端连接的时候 PHP Fatal error Uncaught Error Maximum function nesting level of 256 reached abo
  • ARM汇编多寄存器寻址

    原文转自 http hi baidu com mugua item c43f37cc55a75d35ee4665e6 多寄存器和堆栈寻址的用法 多寄存器寻址 LDMIA LDMIB STMIA STMIB LDMDA LDMDB STMDA
  • 使用Python实现公司地址的(3-4级)标准化

    这个博客的目的是实现公司地址的模糊匹配与3 4级标准化 也可以迁移到房产信息 电话号码之类的字段上 本来的应用场景是反团伙欺诈以及失联客户的修复 大概的意思就是说多个相同公司的同事都在我公司借贷的欺诈可能性要高于其他客户 以及造假的房产信息
  • linux安装百度云盘

    之前window下一直使用绿色 你懂的 的百度云 但时切换到Ubuntu 系统之后 要下载好几个G的百度云资源却没有Linux版的客户端 网上又说使用bcloud 但是在16 04环境安装后总是登录不上 索性直接找了个浏览器插件下载 用起来
  • 股票API下单接口是怎样传入交易数据的?

    股票API下单接口传入交易数据的方法有四种 但主要使用的还是csvdatasetconfig和函数 不过基于当前的线程组或者请求创建CSV数据文件配置组件 如果这份数据只有这一个请求会用 那么就基于请求创建即可 如果这份数据会被这个线程组里
  • IDEA 快捷键等小技巧积累

    快捷键 全局搜索 Ctrl N 利用类名查找类文件 查看类继承关系 Ctrl H 查询某个符号被使用的所有地方 Alt F7 其他 自动导包 代码模板 code template
  • 【node.js】 Windows 下更新 node.js

    文章目录 一 node js 更新 一 查询 node js 版本 二 查询 node js 安装位置 三 官网下载安装包 四 安装到原位置 覆盖旧版本 二 npm 更新 一 查看版本 二 更新版本 三 yarn 更新 一 查看版本 二 更
  • (六)Java操作elasticSearch(2)

    Java操作elasticSearch 2 一 DSL查询文档 0 DSL 1 DSL查询分类 2 全文检索查询 3 精准查询 4 地理坐标查询 5 组合查询 二 搜索结果的处理 0 搜索结果处理整体语法 1 排序 2 分页 3 高亮 三