作者:mobiledu2502862117 | 来源:互联网 | 2023-08-14 14:52
博主的环境是windows+elasticsearch6.7.1+kibana 6.7.1
{
"name" : "TDo83fR",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "4-RI-qcBR46U9FtwxgEJ8g",
"version" : {
"number" : "6.7.1",
"build_flavor" : "oss",
"build_type" : "zip",
"build_hash" : "2f32220",
"build_date" : "2019-04-02T15:59:27.961366Z",
"build_snapshot" : false,
"lucene_version" : "7.7.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
- 添加ES依赖,不同版本springboot与ES环境依赖版本不同
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.example
elasticsearch
0.0.1-SNAPSHOT
elasticsearch
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.2.5.RELEASE
org.springframework.data
spring-data-elasticsearch
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.junit.vintage
junit-vintage-engine
org.projectlombok
lombok
true
1.18.12
com.alibaba
fastjson
1.2.54
org.springframework.boot
spring-boot-maven-plugin
package com.example.elasticsearch.model;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import java.io.Serializable;
import java.util.Date;
//通过这个注解,可以不用写gettersetter方法,有时不好用
@Data
@Document(indexName = "article",type = "_doc")
public class Article implements Serializable {
// 必须指定一个id
@Id
private String id;
private String title;
private String content;
private Integer userId;
private Date createTime;
}
- 创建连接配置类ElasticsearchConfig
package com.example.elasticsearch.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.client.TransportClientFactoryBean;
@Configuration
public class ElasticsearchConfig {
@Bean
TransportClientFactoryBean client() {
TransportClientFactoryBean bean=new TransportClientFactoryBean();
bean.setClusterName("elasticsearch");//默认为:elasticsearch
bean.setClusterNodes("127.0.0.1:9300");//http连接9200,客户端方式9300
return bean;
}
}
- 创建ArticleRepository接口,实现ElasticsearchRepository接口
package com.example.elasticsearch.service;
import com.example.elasticsearch.model.Article;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ArticleRepository extends ElasticsearchRepository {
}
package com.example.elasticsearch.controller;
import com.example.elasticsearch.model.Article;
import com.example.elasticsearch.response.Result;
import com.example.elasticsearch.service.ArticleRepository;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.index.query.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.domain.Sort;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
@RestController
@RequestMapping("/article")
@Slf4j
public class ArticleController {
private final static Logger logger = LoggerFactory.getLogger(ArticleController.class);
@Autowired
private ArticleRepository articleRepository;
// @Autowired
// private ElasticsearchRestTemplate elasticsearchRestTemplate; //查询
// @Autowired
// private ElasticsearchOperations elasticsearchOperations;
//查询数据
@GetMapping("{id}")
public Result findById(@PathVariable String id) {
Optional article = articleRepository.findById(id);
return Result.SUCCESS(article);
}
//删除数据
@DeleteMapping("{id}")
public Result delete(@PathVariable String id) {
// articleRepository.deleteAll();
articleRepository.deleteById(id);
return Result.SUCCESS("删除成功");
}
//保存数据
@PostMapping("save")
public Result save(@RequestBody Article article) {
if (article == null || StringUtils.isEmpty(article.getTitle())) {
return Result.FAIL("标题不能为空");
} else if (StringUtils.isEmpty(article.getContent())) {
return Result.FAIL("内容不能为空");
}
article.setCreateTime(new Date());
Article a = articleRepository.save(article);
if (a.getId() != null)
return Result.SUCCESS("保存成功");
else
return Result.FAIL("保存失败");
}
@GetMapping("list")
public Result list(@RequestParam(name = "pageLimit", defaultValue = "10") Integer pageLimit, @RequestParam(name = "pageCurrent", defaultValue = "1") Integer pageCurrent) {
try {
// 分页参数
Pageable pageable = PageRequest.of(pageCurrent-1,pageLimit);
// QueryStringQueryBuilder builder = new QueryStringQueryBuilder("");
// SearchQuery searchQuery = new NativeSearchQueryBuilder().withPageable(pageable).withQuery(builder).build();
// System.out.println("查询的语句:" + searchQuery.getQuery().toString());
Iterable articles = articleRepository.findAll(pageable);//(searchQuery);
return Result.SUCCESS(articles);
} catch (Exception ex) {
logger.error(ex.getMessage());
}
return Result.FAIL();
}
}