Springboot中使用ElasticSearch

Springboot整合ElasticSearch

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



前言

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

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;

@Repository
public interface ProductRepository extends ElasticsearchRepository<Product, Long> {
}

方法调用

创建测试类

@RunWith(SpringRunner.class)
@SpringBootTest
class 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信息,有详细的描述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值