Springboot中使用ElasticSearch
Springboot整合ElasticSearch
记录下springboot操作ElasticSearch的一些基本使用实例
文章目录
- Springboot整合ElasticSearch
- 前言
- 一、新建项目导入依赖
- 二、修改配置文件
-
-
- 1. 方法一使用默认配置类
- 2.方法二自定义配置
-
- 三、Es 基本使用
-
-
-
- 创建实体
- 常见的FieldType类型及作用
- 创建Dao层
- 方法调用
-
-
- 总结
前言
亲身经历,使用前一定要按照版本对应关系使用,否则会出现各种问题。。。
亲身经历,使用前一定要按照版本对应关系使用,否则会出现各种问题。。。
spring 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信息,有详细的描述。