• Springboot 操作Elasticsearch 方式一 【spring-data-elasticsearch】


      博主的环境是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环境依赖版本不同
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.example</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>elasticsearch</name>
        <description>Demo project for Spring Boot</description>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.5.RELEASE</version>
            <relativePath/>
        </parent>
        <dependencies>
            <!--引入ES-->
            <dependency>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-elasticsearch</artifactId>
    <!--            <version>3.1.21.RELEASE</version>-->
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</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>
    
    
            <!-- SLf4j 日志记录-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
                <version>1.18.12</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.54</version>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
    • 定义Article类
    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<Article,String> {
    
    }
    • 测试接口ArticleController类
    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> 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<Article> articles = articleRepository.findAll(pageable);//(searchQuery);
                return Result.SUCCESS(articles);
            } catch (Exception ex) {
                logger.error(ex.getMessage());
            }
            return Result.FAIL();
        }
    
    }
    • 通过postman测试结果如图:

  • 相关阅读:
    C# 使用IComparer自定义List类的排序方案
    ubuntu的vim模式
    linux系统目录结构与层级命令使用
    GitHub托管项目
    应用TortoiseGit为github账号添加SSH keys
    PHP中利用PHPMailer配合QQ邮箱实现发邮件
    QQ互联 网站应用接入
    dedecms 中变量函数
    WebSocket 协议
    前端组件库
  • 原文地址:https://www.cnblogs.com/personblog/p/14290782.html
Copyright © 2020-2023  润新知