> 文档中心 > Springboot中使用ElasticSearch

Springboot中使用ElasticSearch


Springboot整合ElasticSearch

记录下springboot操作ElasticSearch的一些基本使用实例


文章目录

  • Springboot整合ElasticSearch
  • 前言
  • 一、新建项目导入依赖
  • 二、修改配置文件
      • 1. 方法一使用默认配置类
      • 2.方法二自定义配置
  • 三、Es 基本使用
        • 创建实体
        • 常见的FieldType类型及作用
        • 创建Dao层
      • 方法调用
  • 总结

前言

亲身经历,使用前一定要按照版本对应关系使用,否则会出现各种问题。。。
亲身经历,使用前一定要按照版本对应关系使用,否则会出现各种问题。。。

spring elasticsearch 版本对应关系
Springboot中使用ElasticSearch


一、新建项目导入依赖

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

二、修改配置文件

下面有两种配置方法都可以,任选一种

1. 方法一使用默认配置类

在application.properties 配置中加入es服务地址

spring.elasticsearch.uris= ip地址:端口号

2.方法二自定义配置

在application.properties 配置中加入es服务信息

elasticsearch.host=ip地址elasticsearch.port=端口号

新建配置类

@Configuration@Setter@Getter@AllArgsConstructor@NoArgsConstructor@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)));    }}

三、Es 基本使用

创建实体

@Setter@Getter@AllArgsConstructor@NoArgsConstructor@ToString@Document(indexName = "product") // 指定索引名称,默认会启动时自动创建@Setting(shards = 1,replicas = 1)  // shards 分片数  replicas 副本数public class Product {    @Id // 应用于字段级别以标记用于标识目的的字段。    private Long id;    @Field(type = FieldType.Text)    private String title;    @Field(type = FieldType.Keyword)    private String category;    @Field(type = FieldType.Double)    private Double price;    @Field(type = FieldType.Keyword,index = false)    private String images;}

常见的FieldType类型及作用

//表示该字段是一个文本,并作最大程度拆分,默认建立索引// analyzer 是指定分词器@Field(type=FieldType.Text, analyzer="ik_max_word")    //表示该字段是一个文本,index为false表示不建立索引,默认是true@Field(type=FieldType.Text,index=false) // 表示该字段是一个长整型,默认建立索引@Field(type=FieldType.Long)   // 表示该字段内容是一个文本并作为一个整体,不进行分词,直接索引@Field(type=FieldType.Keyword)      

创建Dao层

import com.es.eslearning.model.Product;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import org.springframework.stereotype.Repository;@Repositorypublic interface ProductRepository extends ElasticsearchRepository<Product, Long> {}

方法调用

创建测试类

@RunWith(SpringRunner.class)@SpringBootTestclass EsLearningApplicationTests {    @Autowired    ProductRepository productRepository;    @Autowired    ElasticsearchRestTemplate elasticsearchRestTemplate;    @Test    public void createEsIndex(){ // 默认启动就会创建 System.out.println("创建索引");    }    // 删除索引    @Test    public void delEsIndex(){ elasticsearchRestTemplate.indexOps(Product.class).delete();    }    /**     * 添加/修改 数据  id 相同执行修改,否则新增     */    @Test    public void saveOrUpdateEs(){ Product product = new Product(); product.setTitle("Java书籍"); product.setId(1L); product.setCategory("book"); product.setImages("test.jpg"); product.setPrice(100.00); productRepository.save(product); // 批量新增 productRepository.saveAll(Arrays.asList(product));    }    /**     * 查询数据     */    @Test    public void queryEs(){ // 查询所有 Iterable<Product> all = productRepository.findAll(); // 根据id查询 Optional<Product> byId = productRepository.findById(1L); // 分页查询 + 排序 // 排序第一种写法 Sort sort = Sort.by(Sort.Direction.DESC, "id"); //排序第二种写法 // Sort.sort(Product.class).by(Product::getId).ascending(); PageRequest request = PageRequest.of(0, 10,sort); productRepository.findAll(request); // 条件查询 Criteria criteria = new Criteria("title").is("Java书籍"); CriteriaQuery query = new CriteriaQuery(criteria); elasticsearchRestTemplate.search(query,Product.class);    }   }

总结

上面都是一些es的基本使用情况,更多方法推荐查看上面的官方版本文档中的api信息,有详细的描述。