(六)Java操作elasticSearch(2)

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 给带有标记的文档增加权重;
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot是一个开箱即用的框架,可以简化Java应用程序的开发。而Elasticsearch是一个开源的搜索引擎,具有强大的全文搜索和分析能力。 要在Spring Boot中操作Elasticsearch,首先需要在项目的依赖管理中增加Elasticsearch的相关依赖,例如elasticsearch和spring-boot-starter-data-elasticsearch。 在配置文件(application.properties或application.yml)中,需要设置Elasticsearch的连接信息,如主机名、端口号和索引名称等。可以通过spring.data.elasticsearch.cluster-nodes和spring.data.elasticsearch.cluster-name属性来进行配置。 接下来,在Java代码中,可以使用Spring Data Elasticsearch提供的API来进行操作。可以通过注解方式定义实体类和索引,使用ElasticsearchRepository来实现数据的增删改查操作。 通过ElasticsearchRepository的save方法可以将数据保存到Elasticsearch中。通过findById方法可以根据ID查询数据,通过search方法可以进行全文搜索等。 在使用Elasticsearch的时候,还可以进行索引的创建和删除操作。可以使用IndicesAdminClient提供的API来调用创建和删除索引的操作。 此外,Elasticsearch还提供了丰富的搜索功能,如分页查询、排序查询、聚合查询等。可以通过QueryBuilder和SearchRequestBuilder等类来构建复杂的查询语句。 总之,Spring Boot和Elasticsearch的结合可以提供一个简便而强大的搜索引擎应用程序开发框架。开发人员可以通过简单的配置和API调用来实现数据的存储、检索和分析功能,大大简化了开发过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值