Java整合ElasticSearch8.13

1、引入Jar包

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2、配置ES连接信息

spring:
  elasticsearch:
    # 地址
    uris: http://xxx:9200
    # 用户名
    username: xxx
    # 密码
    password: xxx
    # 连接超时时间
    connection-timeout: 5s
    # 数据读写超时时间
    socket-timeout: 10s
    # 如果Elasticsearch API路径有前缀,可以在此指定
    #path-prefix:

logging:
  level:
    # 输出es的查询参数(调试用)
    tracer: trace

3、实际使用案例

@Document:

1、indexName:指定实体类对应的Elasticsearch索引名称,如 indexName = "users"

@Field:

1、type:映射类型,包括text、boolean、date、Integer等

2、analyzer:分析器,用来指定分析类型,例如使用ik_max_word的分析器进行文本分析,

@Data
@Document(indexName = "user")
public class User {

    @Id
    private String id;

    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String name;

    @Field(type = FieldType.Integer)
    private int age;

    public User(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
}

public interface UserRepository extends ElasticsearchRepository<User, String> {
    // 可以添加自定义查询方法,但此处无需额外定义,仅使用基础CRUD即可
}
 @Test
 void saveAll() {
        
      List<User> usersToImport = Arrays.asList(
      new User("user5", "Jack", 18),
      new User("user6", "Amy", 19));

      userRepository.saveAll(usersToImport);
 }

 4、ElasticsearchRepository已经实现的基本CRUD和分页查询(也可直接使用ElasticsearchTemplate)

T entity: 要搜索相似实体的参照实体。Elasticsearch会基于此实体的某些属性(见下文)来寻找相似的其他实体。

@Nullable String[] fields: 可选参数,表示用于计算相似度的实体属性列表。如果未指定,可能默认使用所有已索引的文本字段。这些字段通常包含具有相似性计算意义的文本内容。

Pageable pageable: 分页参数,用于控制查询结果的分页和排序。包含页码、每页大小以及排序规则等信息。

⚠️:
searchSimilar方法的核心功能是利用Elasticsearch的相似度搜索(如More Like This查询)来找出与给定实体在指定字段上具有较高相似度的其他实体。这种方法在推荐系统、相关文档检索、异常检测等领域非常有用。只需在自己的Repository接口中继承ElasticsearchRepository,就可以直接使用searchSimilar方法进行相似度搜索,而无需手动编写复杂的Elasticsearch查询DSL。

需要注意的是,实际使用时,确保参照实体的指定字段已正确映射到Elasticsearch并启用相似度计算功能(如使用合适的分析器、设置similarity属性等)。同时,ElasticsearchRepository及其提供的方法通常需要与Spring Data Elasticsearch的其他组件(如ElasticsearchTemplate、ElasticsearchConverter等)以及相应的配置一起使用,才能充分发挥其功能。


@NoRepositoryBean
public interface ElasticsearchRepository<T, ID> extends PagingAndSortingRepository<T, ID>, CrudRepository<T, ID> {
    Page<T> searchSimilar(T entity, @Nullable String[] fields, Pageable pageable);
}
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends Repository<T, ID> {
    
    //该方法用于查询所有实体,并按照指定的排序规则进行排序。
    //参数Sort代表排序条件,可以包含一个或多个排序字段及其排序方向(升序或降序)。
    //返回值是按指定排序规则排列的所有实体的迭代器。
    Iterable<T> findAll(Sort sort);


    /**
    该方法用于分页查询所有实体,并可选地进行排序。参数Pageable封装了分页和排序的相关信息,包括:
      页码 (page):当前请求的页数,从0开始计数。
      每页大小 (size):每页包含的实体数量。
      排序 (Sort):类似于上一个方法中的Sort参数,定义了排序字段和排序方向。

   返回值是Page<T>类型,它不仅包含了当前请求页的所有实体(可通过getContent()方法获取),还提供了   分页相关的元数据,如:
     总页数 (totalPages):基于总实体数和每页大小计算得出的总页数。
     总实体数 (totalElements):数据库中符合条件的实体总数。
     是否有下一页 (hasNext):判断是否还有下一页数据可供查询。
     是否有上一页 (hasPrevious):判断是否还有上一页数据可供查询。
     当前页码 (number):返回当前请求的页码。
     每页大小 (size):返回当前请求的每页大小。
     排序信息 (sort):返回当前请求的排序条件。
    */

    Page<T> findAll(Pageable pageable);

}


@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {

    //保存或更新一个实体。如果传入的实体对象有ID(即主键),且在数据库中已存在对应记录,则执行更新操作;否则插入新记录。返回值是保存后(可能经过转换或生成ID)的实体对象。
    <S extends T> S save(S entity);

    //批量保存或更新多个实体。对于每个实体,执行与save(S entity)相同的操作。返回值是包含所有保存后实体的迭代器
    <S extends T> Iterable<S> saveAll(Iterable<S> entities);

    //根据给定的ID查找实体。如果找到匹配的实体,返回封装在Optional中的实体对象;否则返回空Optional
    Optional<T> findById(ID id);

    //检查是否存在具有指定ID的实体。如果存在,返回true;否则返回false
    boolean existsById(ID id);

    //返回所有实体的集合。通常仅在数据量较小的情况下使用,否则可能导致内存溢出
    Iterable<T> findAll();
    
    //根据一组ID查找对应的实体集合。返回包含所有找到实体的迭代器
    Iterable<T> findAllById(Iterable<ID> ids);

    //返回实体总数
    long count();
    
    //根据指定ID删除对应的实体
    void deleteById(ID id);

    //删除传入的实体对象所对应的数据库记录
    void delete(T entity);
   
    //根据ID批量删除
    void deleteAllById(Iterable<? extends ID> ids);

    //批量删除传入的实体对象集合所对应的数据库记录
    void deleteAll(Iterable<? extends T> entities);

    //删除所有实体,清空整个实体表或集合
    void deleteAll();
}

 关于ES的详解:这些年背过的面试题 —— ES篇-CSDN博客

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些关于 Java 整合 Elasticsearch 7.10.1 的基本步骤,具体如下: 1. 首先,您需要在 Maven 或 Gradle 中添加 Elasticsearch Java 客户端的依赖,例如: Maven: ```xml <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.10.1</version> </dependency> ``` Gradle: ```gradle dependencies { implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.10.1' } ``` 2. 创建一个 Elasticsearch 客户端,例如: ```java RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http"))); ``` 3. 使用客户端执行 Elasticsearch 操作,例如: ```java // 创建索引 CreateIndexRequest request = new CreateIndexRequest("my_index"); client.indices().create(request, RequestOptions.DEFAULT); // 添加文档 IndexRequest request = new IndexRequest("my_index"); request.id("1"); request.source("field1", "value1"); client.index(request, RequestOptions.DEFAULT); // 搜索文档 SearchRequest request = new SearchRequest("my_index"); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(QueryBuilders.matchQuery("field1", "value1")); request.source(sourceBuilder); SearchResponse response = client.search(request, RequestOptions.DEFAULT); ``` 以上就是 Java 整合 Elasticsearch 7.10.1 的基本步骤,您可以根据自己的需求进行相应的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值