Spring整合Elasticsearch----Elasticsearch操作

这篇具有很好参考价值的文章主要介绍了Spring整合Elasticsearch----Elasticsearch操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Spring Data Elasticsearch使用多个接口来定义可以针对Elasticsearch索引调用的操作(有关响应(reactive)接口的描述,请参阅 Reactive Elasticsearch操作)。
  • IndexOperations 定义索引级别的操作,如创建或删除索引。
  • DocumentOperations 定义了基于实体id存储、更新和检索实体的操作。
  • SearchOperations 定义使用查询搜索多个实体的操作
  • ElasticsearchOperations 结合了DocumentOperations和SearchOperations接口。

这些接口对应于Elasticsearch API的结构。
接口的默认实现提供:

  • 索引管理功能。
  • 对域类型的读/写映射支持。
  • 一个丰富的查询和条件api。
  • 资源管理和异常翻译。

索引管理以及索引和映射的自动创建
IndexOperations接口和提供的实现可以从ElasticsearchOperations实例中获得,例如通过调用operations.indexOps(clazz),用户可以在Elasticsearch集群中创建索引、放置映射或存储模板和别名信息。将要创建的索引的详细信息可以使用@Setting注解进行设置,有关详细信息,请参阅索引设置。
这些操作都不是由IndexOperations或ElasticsearchOperations的实现自动完成的。调用这些方法是用户的责任。
使用Spring Data Elasticsearch存储库时,支持自动创建索引和编写映射,请参阅使用相应映射自动创建索引

一、用法示例

这个例子展示了如何在Spring REST控制器中使用注入的ElasticsearchOperations实例。这个例子假设Person是一个带有@Document、@Id等注解的类(参见映射注解概述)。
例1:ElasticsearchOperations用法

@RestController
@RequestMapping("/")
public class TestController {

  private  ElasticsearchOperations elasticsearchOperations;

  public TestController(ElasticsearchOperations elasticsearchOperations) { --------1
    this.elasticsearchOperations = elasticsearchOperations;
  }

  @PostMapping("/person")
  public String save(@RequestBody Person person) {                         --------2
    Person savedEntity = elasticsearchOperations.save(person);
    return savedEntity.getId();
  }

  @GetMapping("/person/{id}")
  public Person findById(@PathVariable("id")  Long id) {                   --------3
    Person person = elasticsearchOperations.get(id.toString(), Person.class);
    return person;
  }
}

1.Spring在构造函数中注入提供的ElasticsearchOperations bean。
2.Elasticsearch集群中存储一些实体。id是从返回的实体中读取的,因为它在person对象中可能为null,并且是由Elasticsearch创建的。
3. 用get检索具有id的实体。

要查看ElasticsearchOperations的全部可能性,请参考API文档。

二、搜索结果类型

当使用DocumentOperations接口的方法检索文档时,只返回找到的实体。当使用SearchOperations接口的方法进行搜索时,每个实体都可以获得其他信息,例如找到的实体的score或sortValues。
为了返回此信息,每个实体都封装在一个SearchHit对象中,该对象包含此实体特定的附加信息。这些SearchHit对象本身在SearchHits对象中返回,该对象还包含有关整个搜索的信息,如maxScore或请求的聚合。现在可以使用以下类和接口:
SearchHit<T>包含以下信息:

  • Id
  • Score
  • Sort Values
  • Highlight fields
  • Inner hits(这是一个嵌入的SearchHits对象,包含最终返回的inner hits)
  • 检索到的类型为<T>的实体

SearchHits<T>包含以下信息:

  • 总点击次数
  • 总命中率关系
  • 最高得分
  • SearchHit<T>对象的列表
  • 返回的聚合
  • 返回的建议结果

SearchPage<T>定义一个包含SearchHits<T>元素的Spring Data Page,该页可用于使用存储库方法进行分页访问。
SearchScrollHits<T>由ElasticsearchRestTemplate中的低级滚动API函数返回,它使用Elasticsearch滚动id丰富了SearchHits<T>。
SearchHitsIterator<T> SearchOperations接口的流式函数返回的迭代器。
ReactiveSearchHits
ReactiveSearchOperations有返回Mono<ReactiveSearchHits<T>>的方法,它包含与SearchHits<T>对象相同的信息,但将提供包含的SearchHit<T>对象作为Flux<SearchHit<T>>而不是列表。

三、查询

在SearchOperations和ReactiveSearchOperations接口中定义的几乎所有方法都接受一个Query参数,该参数定义了要执行的搜索查询。Query是一个接口,Spring Data Elasticsearch提供了三种实现:CriteriaQuery、StringQuery和NativeQuery。

3.1 CriteriaQuery

基于CriteriaQuery的查询允许创建查询来搜索数据,而不需要了解Elasticsearch查询的语法或基础知识。它们允许用户通过简单地链接和组合指定搜索文档必须满足的条件的Criteria对象来构建查询。
当谈到AND或OR时,当组合条件时,请记住,在Elasticsearch中,AND被转换为必须条件,OR被转换为应该条件
Criteria及其用法最好通过示例来解释(假设我们有一个具有价格属性的Book实体):
例2:以给定的价格购买书籍

Criteria criteria = new Criteria("price").is(42.0);
Query query = new CriteriaQuery(criteria);

同一字段的条件可以链接,它们将以一个逻辑AND组合:
例3:以给定的价格购买书籍

Criteria criteria = new Criteria("price").greaterThan(42.0).lessThan(34.0);
Query query = new CriteriaQuery(criteria);

当链接Criteria时,默认使用AND逻辑:
例4:找出所有名字是James,姓氏是Miller的人:

Criteria criteria = new Criteria("lastname").is("Miller") --------1
  .and("firstname").is("James")                           --------2
Query query = new CriteriaQuery(criteria);

1. 第一个条件
2. and() 创建一个新的条件并将其链接到第一个Criteria

如果要创建嵌套查询,则需要为此使用子查询。假设我们想找到所有姓Miller、名为Jack或John的人:
例5:嵌套的子查询

Criteria miller = new Criteria("lastName").is("Miller") --------1 
  .subCriteria(                                         --------2 
    new Criteria().or("firstName").is("John")           --------3 
      .or("firstName").is("Jack")                       --------4 
  );
Query query = new CriteriaQuery(criteria);

1. 为姓氏创建第一个条件
2. 使用AND组合为一个子条件
3. 此子条件是名字为JohnOR组合
4. 还有名字为Jack

有关不同可用操作的完整概述,请参阅Criteria类的API文档。

3.2 StringQuery

这个类接受一个Elasticsearch查询作为JSON字符串。下面的代码显示了一个查询,它搜索名字为“Jack”的人:

Query query = new StringQuery("{ \"match\": { \"firstname\": { \"query\": \"Jack\" } } } ");
SearchHits<Person> searchHits = operations.search(query, Person.class);

如果你已经有一个Elasticsearch查询要使用,那么使用StringQuery可能是合适的。

3.3 NativeQuery

NativeQuery是在具有复杂查询或无法使用Criteria API表示的查询时使用的类,例如在构建查询和使用聚合时。它允许使用Elasticsearch库中所有不同的“co.elastic.clients.elasticsearch._types.query_dsl.Query”实现,因此命名为“native”。
以下代码显示了如何搜索具有给定firstName的人员,对于找到的文档,有一个术语聚合,用于统计这些人员的lastName出现次数:

Query query = NativeQuery.builder()
	.withAggregation("lastNames", Aggregation.of(a -> a
		.terms(ta -> ta.field("lastName").size(10))))
	.withQuery(q -> q
		.match(m -> m
			.field("firstName")
			.query(firstName)
		)
	)
	.withPageable(pageable)
	.build();

SearchHits<Person> searchHits = operations.search(query, Person.class);

3.4 SearchTemplateQuery

这是Query接口的特殊实现,将与存储的搜索模板结合使用。有关更多信息,请参阅搜索模板支持。文章来源地址https://www.toymoban.com/news/detail-855416.html

到了这里,关于Spring整合Elasticsearch----Elasticsearch操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud学习(十一)【深入Elasticsearch 分布式搜索引擎03】

    聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类: 桶(Bucket)聚合:用来对文档做分组 TermAggregation:按照文档字段值分组 Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组 度量(Metric)聚合:用以计算一些值,比如:最大值

    2024年01月23日
    浏览(37)
  • Spring整合Elasticsearch(2)

            可以查询的范围更精确,当ElasticsearchRepository提供的基本方法无法满足我们所需要的查询可以使用原生的方式查询                 高亮查询的配置类,固定写法         高亮查询         高亮显示的字段可以将指定的字段添加标签,然后前端写样式来改变展示的样

    2024年02月16日
    浏览(26)
  • Spring整合Elasticsearch

            启动Elasticsearch的集群,如果不会搭建集群可以看我以前的文章          进入到head的扩展应用,连接后面的健康值为green就表示集群没问题   特征 :    Spring配置支持使用基于Java的 @Configuration 类或ES客户端实例的XML命名空间。             ElasticsearchTemplate 帮助类

    2024年02月16日
    浏览(28)
  • 35 Spring整合Elasticsearch

    spring-boot-starter-data-elasticsearch cluster-name集群名 cluster-nodes集群节点 如果项目中使用了redis,则需要解决冲突 es和redis都基于netty,这两者在启动netty时,会产生冲突:系统会认为redis已经启动了netty,es无法再启动 要尽可能在服务启动早期的时候,修改es.set.netty.runtime.available.pr

    2024年03月16日
    浏览(31)
  • Spring Boot 整合Elasticsearch入门

    Spring Data Elasticsearch 是 Spring Data 项目的子项目,提供了 Elasticsearch 与 Spring 的集成。实现了 Spring Data Repository 风格的 Elasticsearch 文档交互风格,让你轻松进行 Elasticsearch 客户端开发。 应粉丝要求特地将 Elasticsearch 整合到 Spring Boot  中去。本来打算整合到 kono 脚手架中,但是转

    2024年04月13日
    浏览(31)
  • 《Spring Boot 实战派》--13.集成NoSQL数据库,实现Elasticsearch和Solr搜索引擎

             关于搜索引擎 我们很难实现 Elasticseach 和 Solr两大搜索框架的效果;所以本章针对两大搜索框架,非常详细地讲解 它们的原理和具体使用方法, 首先 介绍什么是搜索引擎 、如何用 MySQL实现简单的搜索引擎,以及Elasticseach 的 概念和接口类; 然后介绍Elasticseach

    2023年04月09日
    浏览(77)
  • spring boot es | spring boot 整合elasticsearch | spring boot整合多数据源es

    目录 Spring Boot与ES版本对应 Maven依赖 配置类 使用方式 @Test中注入方式 @Component中注入方式 查询文档 实体类 通过ElasticsearchRestTemplate查询 通过JPA查询 保存文档 参考链接 项目组件版本: Spring Boot:2.2.13.RELEASE Elasticsearch:6.8.0 JDK:1.8.0_66 Tips: 主要看第3列和第5列,根据ES版本选择

    2023年04月18日
    浏览(43)
  • Spring Boot整合Elasticsearch超详细教程

    SpringBoot整合Elasticsearch超详细教程 最新高级版 (1)导入springboot整合ES高级别客户端的坐标 (2)使用编程的形式设置连接的ES服务器,并获取客户端对象 (3)Book实体类 (4)连接Dao层 (5)使用客户端对象操作ES 例如创建索引:(这里需要先执行上面的删除索引操作,否则会报错)

    2023年04月09日
    浏览(40)
  • Spring Boot进阶(19):Spring Boot 整合ElasticSearch | 超级详细,建议收藏

            ElasticSearch是一款基于Lucene的开源搜索引擎,具有高效、可扩展、分布式的特点,可用于全文搜索、日志分析、数据挖掘等场景。Spring Boot作为目前最流行的微服务框架之一,也提供了对ElasticSearch的支持。本篇文章将介绍如何在Spring Boot项目中整合ElasticSearch,并展

    2024年02月06日
    浏览(31)
  • 在Spring Boot中整合Elasticsearch并实现高亮搜索

    本文详细介绍了如何在Spring Boot项目中整合Elasticsearch,实现高亮搜索功能。通过添加依赖、配置Spring Boot、为实体类添加注解,以及在Service层实现高亮搜索,读者能够了解如何在实际项目中利用Spring Boot Data Elasticsearch来操作Elasticsearch并实现高亮搜索。验证示例演示了如何使用RESTful API端点来搜索并获取包含高亮字段的用户列表,为读者提供了实际应用的参考。这篇文章将帮助读者轻松掌握Spring Boot与Elasticsearch的整合方法,从而为项目增加强大的搜索功能。

    2024年02月06日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包