Springboot集成ES。分页、排序

2 篇文章 0 订阅
2 篇文章 0 订阅

首先需要创建一个springboot项目这里就不做演示啦,自己Google吧~~https://start.spring.io/ 地址放这里

还需要安装ES,自己Google,没看到标题是springboot集成ES。当然安装很简单啦,个人感觉比安装MySQL还简单

这里附上中文文档https://es.xiaoleilu.com/     还有陌生人大哥写的安装教程 https://www.cnblogs.com/yanketao/p/10983556.html

好啦就这样啦!(哦~~还有JDK1.8感觉这是废话)

 

下面我们进入正题开搞。

导包

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

yml文件

spring:
  data:
    elasticsearch:
      cluster-name: elasticsearch
      cluster-nodes: localhost:9300
      repositories:
        enabled: true

自己安装的时候可以自己配置cluster-name,cluster-nodes记住用9300别用9200,我就踩坑了

 

下面开始操作了把好自己的小眼神。

 

实体类

注意这个indexName必须小写(小坑)

package com.mcadmin.server.thirdparty.es;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "testuser",type = "testusertype" ,shards = 1,replicas = 0, refreshInterval = "-1")
public class User {

    @Id
    private Integer id;

    private String name;

    private Integer age;

    private long time;


    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public long getTime() {
        return time;
    }

    public void setTime(long time) {
        this.time = time;
    }
}

 

接口继承ElasticsearchRepository<自己的实体类,Integer>

package com.mcadmin.server.thirdparty.es;

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface UserRepository extends ElasticsearchRepository<User,Integer> {

    /**
     * 查询用户信息
     * @param id
     * @return
     */
    User queryUserById (int id);



}

 

简单的带条件查询可以直接拼接提示出来方法名查询(很多方法根据你实体类的名字生成的,具体自己去试),此处不能随意命名

 

 

 

Controller层(简单的增删改查)

package com.mcadmin.server.thirdparty.es;

import com.mcadmin.server.util.UnixUtil;
import org.elasticsearch.common.Strings;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.*;

@RestController
@RequestMapping("/mcapi/pub/esUser")
public class UserController {

    @Autowired
    private UserRepository userRepository;


    @RequestMapping("/addUser")
    public User addUser(@RequestParam int id,
                        @RequestParam String name,
                        @RequestParam int age) {
        User user = new User();
        user.setId(id);
        user.setName(name);
        user.setAge(age);
        user.setTime(UnixUtil.getNowTimeStamp()); //当前时间戳
        userRepository.save(user);
        return user;
    }

    @RequestMapping("/delUser")
    public String delUser(@RequestParam int id) {
        User user = userRepository.queryUserById(id);
        userRepository.delete(user);
        return "success";
    }

    @RequestMapping("/updateUser")
    public String updateUser(@RequestParam int id,
                             @RequestParam String name) {
        User user = userRepository.queryUserById(id);
        user.setName(name);
        userRepository.save(user);
        return "success";
    }

    @RequestMapping("/getUser")
    public User getUser(@RequestParam int id) {
        User user = userRepository.queryUserById(id);
        return user;
    }


}

 

下面又有大料来咯!

上面都是简单查询,我们在实际开发过程中随便写个列表都要分页、排序、多条件查询。eeeee··········

直接上代码吧!!!!

/**
     * 模糊、分页、排序查询
     *
     * @param id
     * @param name
     * @param pageindex 页码
     * @param pageSize  每页多少条
     * @return
     */
    @RequestMapping("getLikeUser")
    public List<User> getLikeUser(@RequestParam int id,
                                  @RequestParam String name,
                                  @RequestParam int pageindex,
                                  @RequestParam int pageSize) {
        //检索条件
        BoolQueryBuilder bqb = QueryBuilders.boolQuery();
        if (id != 0)
            bqb.must(QueryBuilders.matchPhraseQuery("id", id));
        if (!Strings.isEmpty(name))
            bqb.must(QueryBuilders.matchPhraseQuery("name", name));
        //排序条件
        FieldSortBuilder fsb = SortBuilders.fieldSort("time").order(SortOrder.DESC);
        //分页条件
        pageindex = pageindex == 0 ? 1 : pageindex;
        pageSize = pageSize == 0 ? 10 : pageSize;
        Pageable pageable = PageRequest.of(pageindex - 1, pageSize);
        //构建查询
        SearchQuery query = new NativeSearchQueryBuilder()
                .withQuery(bqb)
                .withSort(fsb)
                .withPageable(pageable)
                .build();
        Page<User> searchResponse = userRepository.search(query);

        return searchResponse.getContent();
    }

 

------------------------------------------------------------------------------------------------------------------------------------------

各位大神们,还有啥坑或者哪里需要补充的欢迎评论!,我及时更新~~~~

  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
在Spring Boot中集成Elasticsearch并实现分页,你可以按照以下步骤操作: 1. 首先,确保已经添加了Elasticsearch的依赖。在你的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2. 创建一个Elasticsearch配置类,用于配置Elasticsearch的连接信息。可以参考下面的示例代码: ```java @Configuration @EnableElasticsearchRepositories(basePackages = "com.example.repository") public class ElasticsearchConfig { @Value("${elasticsearch.host}") private String host; @Value("${elasticsearch.port}") private int port; @Value("${elasticsearch.clustername}") private String clusterName; @Bean public Client client() throws Exception { Settings settings = Settings.builder() .put("cluster.name", clusterName) .build(); TransportClient client = new PreBuiltTransportClient(settings); client.addTransportAddress(new TransportAddress(InetAddress.getByName(host), port)); return client; } @Bean public ElasticsearchOperations elasticsearchTemplate() throws Exception { return new ElasticsearchTemplate(client()); } } ``` 3. 创建一个Elasticsearch实体类,用于映射索引中的文档。例如,假设你有一个名为"User"的索引,可以创建一个名为"User"的实体类,包含需要存储的字段及对应的注解。示例代码如下: ```java @Document(indexName = "user_index", type = "user") public class User { @Id private String id; @Field(type = FieldType.Keyword) private String name; // getters and setters } ``` 4. 创建一个Elasticsearch的Repository接口,用于执行查询操作。示例代码如下: ```java @Repository public interface UserRepository extends ElasticsearchRepository<User, String> { Page<User> findByName(String name, Pageable pageable); } ``` 5. 在你的服务类或控制器中注入UserRepository,并使用其提供的方法进行分页查询。示例代码如下: ```java @Service public class UserService { @Autowired private UserRepository userRepository; public Page<User> searchUsersByName(String name, int page, int size) { Pageable pageable = PageRequest.of(page, size); return userRepository.findByName(name, pageable); } } ``` 这样,你就可以在Spring Boot中集成Elasticsearch并实现分页查询了。你可以根据实际需求进行适当的调整和扩展。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值