elasticsearch学习1—springboot整合:基本使用,分页

1、创建springboot项目,pom依赖如下:

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

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <!--es依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
<!--使用阿里云仓库-->
<repositories>
    <repository>
        <id>aliyun-repos</id>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

<pluginRepositories>
    <pluginRepository>
        <id>aliyun-plugin</id>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>
</pluginRepositories>

二、接口:UserDao

/**
 * @author: windy
 * @create: 2019-11-30 15:51
 */
public interface UserDao extends ElasticsearchRepository<User, String> {
}

三、实体类

/**
 * @author: windy
 * @create: 2019-11-30 15:47
 */
@Document(indexName = "info",type = "user")
@Data
public class User {

    @Id
    private String id;

    private String name;

    private Integer age;

    private Integer sex;
}

四、controller

@Controller
public class EsController {

    @Autowired
    private UserDao userDao;

    @ResponseBody
    @RequestMapping("add")
    public User addUser(@RequestBody User user){
       return userDao.save(user);
    }

    @ResponseBody
    @RequestMapping("findById")
    public Optional<User> findById(String id){
        return userDao.findById(id);
    }

    /**
     * 分页
     */
    @ResponseBody
    @RequestMapping("/search")
    public Page<User> search(String keyWord, @PageableDefault(page = 0, value = 3) Pageable pageable) {
        // 查询所有的
        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
        if (!StringUtils.isEmpty(keyWord)) {
            // 模糊查询 一定要ik中文
            MatchQueryBuilder matchQuery = QueryBuilders.matchQuery("name", keyWord);
            boolQuery.must(matchQuery);
        }
        Page<User> page = userDao.search(boolQuery, pageable);
        return page;
    }
}

五、启动类:

@SpringBootApplication
@EnableElasticsearchRepositories(basePackages = "com.windy.springbootes.repository")
public class SpringbootEsApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootEsApplication.class, args);
    }

}

六、利用postman测试

1、添加数据

2、分页查询,size=3

 

### 实现Spring Boot与Elasticsearch 8分页查询 为了在Spring Boot项目中实现针对Elasticsearch 8的分页查询功能,可以利用`Pageable`接口来处理请求参数中的分页信息。通过配置`HandlerMethodArgumentResolver`实例,使得Spring MVC能够解析来自HTTP请求的分页和排序参数并转换成相应的对象[^1]。 下面是一个简单的例子展示如何设置以及执行带有分页特性的搜索操作: #### 添加依赖项 首先,在项目的构建文件(Maven或Gradle)里加入必要的库支持,确保包含了最新的Spring Data Elasticsearch版本,这可以通过调整`spring-data-releasetrain.version`属性值到所需版本号来完成[^2]。 对于Maven用户来说,pom.xml应包含如下片段: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>对应于Elasticsearch 8.x兼容版次</version> </dependency> ``` #### 创建实体类映射 定义一个Java类表示要存储的数据结构,并标注适当注解以便框架识别其为文档模型的一部分。这里假设有一个名为`Product`的产品列表需要索引化存入ES集群内。 ```java import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; @Document(indexName = "products") public class Product { @Id private String id; private String title; private double price; } ``` #### 配置Repository接口 接着创建继承自`PagingAndSortingRepository<T,ID>`泛型类型的仓库层组件,它提供了基本CRUD加上基于页面的结果集获取能力。 ```java import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.repository.PagingAndSortingRepository; public interface ProductRepository extends PagingAndSortingRepository<Product, String> { // 自动实现了带分页的支持方法 Page<Product> findByTitleContaining(String keyword, Pageable pageable); } ``` #### 编写控制器逻辑 最后一步是在RESTful API端点处接收客户端传来的分页指令,调用上述声明的方法从而返回特定范围内的记录集合给前端应用消费。 ```java @RestController @RequestMapping("/api/products") public class ProductController { @Autowired private ProductRepository productRepo; @GetMapping("") public ResponseEntity<?> getProducts(@RequestParam(required=false) String q, Pageable pageable){ if (q != null && !q.isEmpty()){ return new ResponseEntity<>(productRepo.findByTitleContaining(q,pageable), HttpStatus.OK); }else{ return new ResponseEntity<>(productRepo.findAll(pageable),HttpStatus.OK); } } } ``` 以上就是关于怎样借助Spring Boot搭建起一套完整的面向Elasticsearch数据库做高效检索服务的同时还具备良好用户体验设计模式——即支持分页浏览商品详情页的一个完整案例说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值