欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Springboot集成Elasticsearch的步骤与相关功能

程序员文章站 2022-03-13 20:38:24
目录集成配置步骤步骤1:加入 maven 相关依赖步骤2:配置 elasticsearch 的主机和端口步骤3:配置 elaseticsearch 客户端步骤4:创建文档实体步骤5:创建 contro...

集成配置步骤

步骤1:加入 maven 相关依赖

<!-- 指定 springboot 版本 -->
<parent>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-parent</artifactid>
    <version>2.5.7</version>
    <relativepath/>
</parent>
 
<!-- 相关jar包 -->
<dependencies>
    <!-- springboot核心jar包 -->
    <dependency>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter</artifactid>
    </dependency>
    <!-- web开发包:包含tomcat和springmvc -->
    <dependency>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-web</artifactid>
    </dependency>
    <!-- es 核心包 -->
    <dependency>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-data-elasticsearch</artifactid>
    </dependency>
    <!-- lombok 实体简化插件 -->
    <dependency>
        <groupid>org.projectlombok</groupid>
        <artifactid>lombok</artifactid>
        <optional>true</optional>
    </dependency>
</dependencies>

步骤2:配置 elasticsearch 的主机和端口

elasticsearch:
  host: 127.0.0.1
  port: 9200

Springboot集成Elasticsearch的步骤与相关功能

步骤3:配置 elaseticsearch 客户端

@data
@configuration
@configurationproperties(prefix = "elasticsearch")
public class elasticsearchconfig extends abstractelasticsearchconfiguration {
 
    private string host;
    private integer port;
 
    @override
    public resthighlevelclient elasticsearchclient() {
        return new resthighlevelclient(restclient.builder(new httphost(host, port)));
    }
 
}

Springboot集成Elasticsearch的步骤与相关功能

步骤4:创建文档实体

@data
@document(indexname = "users")
public class user {
 
    @id
    @field(type = fieldtype.long)
    private long id;
 
    @field(type = fieldtype.text)
    private string name;
 
    @field(type = fieldtype.keyword)
    private string sex;
 
    @field(type = fieldtype.integer)
    private integer age;
 
    @field(type = fieldtype.text)
    private string address;
 
}

Springboot集成Elasticsearch的步骤与相关功能

步骤5:创建 controller,service, dao 层

(5.1)contrller 层

@restcontroller
@requestmapping("/user")
public class usercontroller {
 
    @autowired
    private userservice userservice;
 
}

(5.2)service 层

public interface userservice {
 
}

(5.3)service 实现层(userdao 见 5.4)

@service
public class userserviceimpl implements userservice {
 
    @autowired
    private userdao userdao;
 
}

(5.4)dao 层

@repository
public interface userdao extends elasticsearchrepository<user, long> {
 
}

整个相关类创建完成后,项目结构应该如下图所示:

Springboot集成Elasticsearch的步骤与相关功能

相关功能实现

这里以实际功能举例,并列出 controller 和 service 层的实现类写法作为参考。

主流的一些功能,es 已经给你封装,默认给与了支持(如:示例1-6),这些相关的实现不需要我们再写 dao 层,但一些较为业务性的查询,还需要自己手动来写。

1. 添加文档

controller 层:

@postmapping("/save")
public string save(@requestbody user user) {
    long id = system.currenttimemillis();
    user.setid(id);
    userservice.save(user);
    return "新增成功,id为:" + id;
}

service 层:

@override
public long save(user user) {
    userdao.save(user);
    return user.getid();
}

测试效果:

Springboot集成Elasticsearch的步骤与相关功能

 2. 修改文档

【注】新增文档和修改文档操作,dao 层都是调用的 save() 方法,当 id 不存在的时候,es(elasticsearch)就会执行新增操作,当 id 对象已经存在的时候,就会执行修改操作。

controller 层:

@postmapping("/update")
public string update(@requestbody user user) {
    userservice.save(user);
    return "修改成功";
}

service 层:

@override
public long save(user user) {
    userdao.save(user);
    return user.getid();
}

测试效果:

Springboot集成Elasticsearch的步骤与相关功能

 3. 根据id查询文档

controller 层:

@getmapping("/{id}")
public user getbyid(@pathvariable("id") long id) {
    return userservice.getbyid(id);
}

service 层:

@override
public user getbyid(long id) {
    optional<user> find = userdao.findbyid(id);
    if (find.ispresent()) {
        return find.get();
    }
    return null;
}

测试效果:

Springboot集成Elasticsearch的步骤与相关功能

 4. 根据id删除文档

controller 层:

@deletemapping("/{id}")
public string deletebyid(@pathvariable("id") long id) {
    userservice.deletebyid(id);
    return "删除成功";
}

service 层:

@override
public void deletebyid(long id) {
    userdao.deletebyid(id);
}

测试效果:

Springboot集成Elasticsearch的步骤与相关功能

 5. 查询所有文档

controller 层:

@getmapping("/all")
public list<user> all() {
    return userservice.getall();
}

service 层:

@override
public list<user> getall() {
    iterable<user> users = userdao.findall();
    if (users == null) {
        return collections.emptylist();
    }
    list<user> userlist = new arraylist<user>();
    users.foreach(o -> userlist.add(o));
    return userlist;
}

测试效果:

Springboot集成Elasticsearch的步骤与相关功能

 6. 条件查询(单个条件)

如:查询name包含"玛丽"的数据

controller 层:

@getmapping("/listbyname")
public list<user> listbyname(string name) {
    return userservice.getlistbyname(name);
}

service 层:

@override
public list<user> getlistbyname(string name) {
    return userdao.findbyname(name);
}

dao 层:测试效果:

Springboot集成Elasticsearch的步骤与相关功能

 7. 条件查询(多条件)

如:查询 name包含"玛丽",年龄为25的数据。

controller 层:

@getmapping("/listbynameandage")
public list<user> listbynameandage(string name, integer age) {
    return userservice.getlistbynameandage(name, age);
}

service 层:

@override
public list<user> getlistbynameandage(string name, integer age) {
    return userdao.findbynameandage(name, age);
}

dao 层:

list<user> findbynameandage(string name, integer age);

Springboot集成Elasticsearch的步骤与相关功能

 8. 分页查询(降序)

controller 层:

@getmapping("/listorderbyagedesc")
public list<user> listorderbyagedesc() {
    return userservice.getlistorderbyagedesc();
}

service 层:

@override
public list<user> getlistorderbyagedesc() {
    return userdao.findbyorderbyagedesc();
}

dao 层:

list<user> findbyorderbyagedesc();

测试效果:

Springboot集成Elasticsearch的步骤与相关功能

 9. 分页查询(升序)

 controller 层:

@getmapping("/listorderbyageasc")
public list<user> listorderbyageasc() {
    return userservice.getlistorderbyageasc();
}

service 层:

@override
public list<user> getlistorderbyageasc() {
    return userdao.findbyorderbyageasc();
}

dao 层:

list<user> findbyorderbyageasc();

测试效果:

Springboot集成Elasticsearch的步骤与相关功能

 10. 分页查询

controller 层:

@getmapping("/page")
public page<user> page(integer pagenum, integer pagesize) {
    return userservice.getpage(pagenum, pagesize);
}

service 层:

@override
public page<user> getpage(int pagenum, int pagesize) {
    // 注意,这里的pagenum是从0开始的,如果要查询第1页数据,pagenum应该为0
    pageable pageable = pagerequest.of(pagenum, pagesize);
    return userdao.findall(pageable);
}

测试效果:

Springboot集成Elasticsearch的步骤与相关功能

 11. 范围查询( > )

controller 层:

@getmapping("/listgreaterthanage")
public list<user> listgreaterthanage(integer age) {
    return userservice.getlistgreaterthanage(age);
}

service 层:

@override
public list<user> getlistgreaterthanage(integer age) {
    return userdao.findbyagegreaterthan(age);
}

dao 层:

list<user> findbyagegreaterthan(integer age);

测试效果:

Springboot集成Elasticsearch的步骤与相关功能

12. 范围查询( >= ) 

controller 层:

@getmapping("/listgreaterthanequalage")
public list<user> listgreaterthanequalage(integer age) {
    return userservice.getlistgreaterthanequalage(age);
}

service 层:

@override
public list<user> getlistgreaterthanequalage(integer age) {
    return userdao.findbyagegreaterthanequal(age);
}

dao 层:

list<user> findbyagegreaterthanequal(integer age);

测试效果:

Springboot集成Elasticsearch的步骤与相关功能

 13. 范围查询( < )

controller 层:

@getmapping("/listlessthanage")
public list<user> listlessthanage(integer age) {
    return userservice.getlistlessthanage(age);
}

service 层:

@override
public list<user> getlistlessthanage(integer age) {
    return userdao.findbyagelessthan(age);
}

dao 层:

list<user> findbyagelessthan(integer age);

测试效果:

Springboot集成Elasticsearch的步骤与相关功能

 14. 范围查询( <= )

controller 层:

@getmapping("/listlessthanequalage")
public list<user> listlessthanequalage(integer age) {
    return userservice.getlistlessthanequalage(age);
}

service 层:

@override
public list<user> getlistlessthanequalage(integer age) {
    return userdao.findbyagelessthanequal(age);
}

dao 层:

list<user> findbyagelessthanequal(integer age);

测试效果:

Springboot集成Elasticsearch的步骤与相关功能

elasticsearch中对索引的一些常用操作

1. 获取elasticsearch中所有的index:

curl -xget 'localhost:9200/_cat/indices?v&pretty'

2. 获取某索引下所有的type:

获取elasticsearch索引下所有的type定义

curl -xget 'localhost:9200/elasticsearch/_mapping'

3. 删除索引:

删除elasticsearch1索引

curl -xdelete 'localhost:9200/elasticsearch1?pretty'

4. 删除某索引下的某type数据:

删除索引elasticsearch下的article类型

curl -xdelete 'http://localhost:9200/elasticsearch/article/'

5. 查看某索引的某type下所有的数据:

查找elasticsearch索引中所有的类型为company的数据

http://localhost:9200/elasticsearch/company/_search

总结

到此这篇关于springboot集成elasticsearch的文章就介绍到这了,更多相关springboot集成elasticsearch内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!