使用ElasticsearchRepository和ElasticsearchRestTemplate操作Elasticsearch,Spring Boot整合Elasticsearch

这篇具有很好参考价值的文章主要介绍了使用ElasticsearchRepository和ElasticsearchRestTemplate操作Elasticsearch,Spring Boot整合Elasticsearch。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Elasticsearch官网参考文档:https://www.elastic.co/guide/index.html
Elasticsearch官方下载地址:https://www.elastic.co/cn/downloads/elasticsearch
https://docs.spring.io/spring-data/elasticsearch/reference/

添加依赖

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

修改yml配置文件

server:
  port: 8082
spring:
  elasticsearch:
    rest:
      uris: 192.168.25.131:9200 #集群 后面加 , 


一、实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
//indexName 索引库名称 名字如果是字母那么必须是小写字母
//createIndex 是否创建索引
@Document(indexName = "student",createIndex = true)
public class Student {

    @Id
    @Field(store = true, type = FieldType.Keyword)
    private String sId;

    @Field(store = true, type = FieldType.Keyword)
    private String sName;

    @Field(store = true, type = FieldType.Text, analyzer = "ik_smart")
    //Text可以分词 ik_smart=粗粒度分词 ik_max_word 为细粒度分词
    private String sAddress;

    @Field(index = false, store = true, type = FieldType.Integer)
    private Integer sAge;

    @Field(index = false, store = true, type = FieldType.Date, format = DateFormat.basic_date_time)
    private Date sCreateTime;

    @Field(type = FieldType.Keyword)
    private String[] sCourseList; //数组类型 由数组中第一个非空值决定(这里数组和集合一个意思了)

    @Field(type = FieldType.Keyword)
    private List<String> sColorList; //集合类型 由数组中第一个非空值决定

}

二、继承ElasticsearchRepository类

public interface EsStudentRepository extends ElasticsearchRepository<McMesgPushRecDetailVO, String> {
    /**
     * 自定义查询方法,方法名需要遵循【自定义方法命名约定】
     * @param sName
     * @param sAddress
     * @return
     */
    List<Student> findBySNameOrSAddress(String sName, String sAddress);

}

【自定义方法命名约定】:

elasticsearchrepository,elasticsearch,spring boot,jenkins

二、ElasticsearchRepository和ElasticsearchRestTemplate使用步骤

1.接口类

代码如下(示例):

public interface EsStudentService {

    /**
     * 保存到ES中
     * @param Student
     */
    public void save(Student student);

    /**
     * 根据消息内容或手机号查询ES中的结果
     * @param messageContents
     * @param contactContents
     * @return
     */
    public List<Student> findBySNameOrSAddress(String sName, String sAddress);

    /**
     * 批量添加或更新文档
     * @param list
     */
    public void saveOrUpdate(List<Student> list);

    /**
     * 查询
     * @param param value
     * @return
     */
    public List<Student> query(String param,String value,Page page);
}

2.实现方法

@Service
public class EsStudentServiceImpl implements EsStudentService {

    @Resource
    private EsStudentRepository studentRepository;

    /**
     * spring容器已存在此bean实例,直接注入即可
     */
    @Resource
    private ElasticsearchRestTemplate elasticsearchRestTemplate;


    /**
     * 保存消息详情到ES中
     * @param detailVO
     */
    @Override
    public void save(Student student) {
    	//ElasticsearchRepository封装好的方法,还有更多其他封装好的方法
        studentRepository.save(student);
    }

    /**
     * 从ES中查询结果
     * @param sName
     * @param sAddress
     * @return
     */
    @Override
    public List<student> findBySNameOrSAddress(String messageContents, String contactContents) {
    	//自定义查询方法
        return studentRepository.findBySNameOrSAddress(String sName, String sAddress);
    }

    /**
     * 批量保存或更新
     * @param list
     */
    @Override
    public void saveOrUpdate(List<Student> list){
        if (!CollectionUtils.isEmpty(list)){
            List<IndexQuery> indexQueries = new ArrayList<>();
            for (Student student : list){
                IndexQuery indexQuery = new IndexQuery();
                indexQuery.setObject(student );
                indexQueries.add(indexQuery);
            }
            elasticsearchRestTemplate.bulkIndex(indexQueries, IndexCoordinates.of("student"));
        }
    }

    /**
     * 查询 分页
     * @param param
     * @return
     */
    @Override
    public List<Student> query(String param, String value, Page page){
        List<Student> list = new ArrayList<>();
        BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
        List<String> params = Arrays.asList(param.split(";"));
        for (String queryColumn : params){
            queryBuilder.must(QueryBuilders.fuzzyQuery(queryColumn, value));
        }
        queryBuilder.filter();
        NativeSearchQuery query = new NativeSearchQueryBuilder()
                //过滤
                .withQuery(queryBuilder)
                //分页
                .withPageable(PageRequest.of(page.getPageNumber(), page.getPageSize()))
                .build();
        SearchHits<Student> search = elasticsearchRestTemplate.search(query, Student.class);
        if(search.getTotalHits()>0){
            search.forEach(userSearchHit ->{
                list.add(userSearchHit.getContent());
            });
        }
        return list;
    }
}

3.接口测试

	/**
	* 注入
	**/
    @Resource
    private EsStudentService esStudentService;
    //ElasticsearchRepository
     @RequestMapping("/esTest")
    public String esTest(@RequestBody Student student){
    esStudentService.save(vo);
        return "res";
    }
	//ElasticsearchRepository
    @RequestMapping("/esTest2")
    public String esTest(@RequestParam String sName){
        List<McMesgPushRecDetailVO> list = 	esStudentService.findBySNameOrSAddress(messageContents,null);
        return JSONArray.toJSONString(list);
    }
    //ElasticsearchRestTemplate
    @RequestMapping("/esTest3")
    public String esTest3(@RequestParam String sName){
        Page page = new Page();
        page.setPageNumber(1);
        page.setPageSize(10);
        List<Student> list = esStudentService.query("sName",sName,page);
        return JSONArray.toJSONString(list);
    }
     //ElasticsearchRestTemplate
    @RequestMapping("/esTest4")
    public String esTest4(@RequestBody Student student){
        List<Student> list = new ArrayList<>();
        list.add(vo);
        esMcMesgPushRecDetailService.saveOrUpdate(list);
        return "res";
    }

总结

如果注入失败ElasticsearchRepository:

1.@EnableElasticsearchRepositories 添加此注解扫描Repository
2.检查自定义方法是否符合约束文章来源地址https://www.toymoban.com/news/detail-855315.html

到了这里,关于使用ElasticsearchRepository和ElasticsearchRestTemplate操作Elasticsearch,Spring Boot整合Elasticsearch的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • No qualifying bean of type ‘org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate‘ a

    No qualifying bean of type ‘org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 提示找不到 ElasticsearchRestTemplate 写一个配置类注入

    2024年02月17日
    浏览(47)
  • ElasticsearchRestTemplate 基本使用

    随着数据量的增加和数据结构的复杂化,传统的关系型数据库已经不能满足用户的需求,而搜索引擎则成为了一种更加高效、可扩展的数据检索方案。而 Elasticsearch 则是一个流行的搜索引擎,在 Java 生态系统中,ElasticsearchRestTemplate 是一个使用起来非常方便的 Elasticsearch 客户

    2024年02月09日
    浏览(33)
  • ES简单教程(二)使用ElasticsearchRestTemplate新增、删除索引文档数据

    注意 :不是新增索引哈,是为某个索引新增/删除文档数据,即为某个表新增或者删除表数据。

    2024年02月11日
    浏览(45)
  • 记录Springboot使用ElasticsearchRestTemplate的updateByQuery的用法的坑

    由于ElasticsearchRestTemplate对 RestHighLevelClient 进一步的封装,因此对updateByQuery的摸索过程记录 如果使用如下图的方式,会导致script构造的时候出现语法错误 此测试过程历时几个小时 ** 另外还需要注意elasticsearch中该字段的数据类型存储,在进行Query构建时,需要与elasticsearch中

    2024年02月07日
    浏览(43)
  • ES简单教程(四)使用ElasticsearchRestTemplate多条件分页查询(复杂版)

    TIPS :本文实现类似数据库后台管理系统的多条件分页查询。

    2024年02月11日
    浏览(47)
  • ES简单教程(五)使用ElasticsearchRestTemplate手动生成ES索引 项目启动自动生成ES索引

    其实使用 SpringBoot 项目玩ES的时候,人家本身是提供了一个注解 @Docment 是可以自动在项目启动的时候创建ES索引的! 只不过没用,因为 ES 的版本在升级, ElasticsearchRestTemplate 配套的脚手架也在升级,所以你会在网上遇到一个情况:搜到的各类解决方案可能都太适配你的情况,

    2024年02月03日
    浏览(65)
  • SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)

    最近在单位搞日志相关的东西,然后部分日志就存储到了elasticsearch索引库,慢慢发觉索引库用着是真香,写这篇文章的目的就是记录一下关于ElasticsearchRestTemplate Api 的使用 下载及整合ElasticSearch SpringBoot2.3.x整合ElasticSearch

    2024年02月11日
    浏览(48)
  • 使用Elasticsearch进行数据批量操作

    Elasticsearch是一个开源的搜索和分析引擎,基于Lucene库开发。它可以用来实现文本搜索、数据分析、实时数据处理等功能。在大数据时代,Elasticsearch成为了处理和分析大量数据的首选工具之一。 数据批量操作是Elasticsearch中的一种常见操作,它可以用来对大量数据进行创建、更

    2024年02月22日
    浏览(45)
  • elasticsearch 使用 RestAPI 操作索引库

    我们统一的把mysql与elasticsearch的概念做一下对比: MySQL Elasticsearch 说明 Table Index 索引(index),就是文档的集合,类似数据库的表(table) Row Document 文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式 Column Field 字段(Field),就是JSON文档中的字段,类

    2024年02月07日
    浏览(45)
  • 【Elasticsearch篇】详解使用RestClient操作索引库的相关操作

    Elasticsearch是一个开源的分布式搜索和分析引擎, 用于实时搜索、分析和存储大规模数据 。它基于Apache Lucene库构建,提供了一个简单而强大的分布式搜索解决方案。 Elasticsearch具有以下特点: 分布式架构:Elasticsearch可以在多个节点上分布数据,并自动处理数据的复制、故障

    2024年01月24日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包