springboot与es集成操作-基础篇3(动态创建索引)

这篇具有很好参考价值的文章主要介绍了springboot与es集成操作-基础篇3(动态创建索引)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


需求:动态创建索引,数据每天更新,更新后创建新的索引,然后删除原来索引。为了不影响再创建索引的时候影响功能的使用。
前面的添加依赖、yml中增加es配置、实现Repository操作与 springboot与es集成操作-基础篇保持一致。。。。。。

1.固定索引实体类:

@Data
@FieldNameConstants
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName = "index_search")
public class IndexSearch {
    @Id
    private long id;

    @ApiModelProperty(value = "名称")
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String name;

    @ApiModelProperty(value = "别名")
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String displayName;
}

2.动态创建索引的实体类:

createIndex 默认为true,再启动项目的时候会自动创建索引,在这设为false,改为后续的手动创建索引。
indexName 索引名称,动态创建索引,所以索引的名称为传递过来的名称。esConfig为索引名称类,再执行过程中会将索引名称传递到esConfig中,进一步将实体SubstanceSearch的名称赋值

//indexName 索引名称,动态创建索引,所以索引的名称为传递过来的名称。esConfig为索引名称类,再执行过程中会将索引名称传递到esConfig中,进一步将实体SubstanceSearch的名称赋值
@Data
@FieldNameConstants
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName = "#{esConfig.getApiCallIndexName()}",createIndex = false)
public class SubstanceSearch {
    @Id
    private long id;

    @ApiModelProperty(value = "名称")
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String name;

    @ApiModelProperty(value = "别名")
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String displayName;

3.索引名称类:

import org.springframework.stereotype.Component;

@Component(value = "esConfig")
public class ElasticSearchConfiguration {

    public static String apiCallIndexNamePrefix;

    public String getApiCallIndexName() {
        return apiCallIndexNamePrefix;
    }
}

4.动态创建索引

    @Autowired
    private ElasticsearchRestTemplate restTemplate;
    /**
     * 创建索引
     **/
    @GetMapping("/createIndex")
    public RestResult createIndex() throws Exception {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmm");
        //生成索引名称
        String dateString = "index_substance" + formatter.format(new Date());
        //传递索引名称
        ElasticSearchConfiguration.apiCallIndexNamePrefix = dateString;
        //判断索引库中是否存在该索引
        if (!restTemplate.indexOps(IndexCoordinates.of(dateString)).exists()) {
            Document mapping = restTemplate.indexOps(IndexCoordinates.of(dateString)).createMapping(SubstanceSearch.class);
            restTemplate.indexOps(IndexCoordinates.of(dateString)).create();
            restTemplate.indexOps(IndexCoordinates.of(dateString)).putMapping(mapping);
        }

        return RestResultHelper.success();
    }

5.查询

自动补全查询文章来源地址https://www.toymoban.com/news/detail-517340.html

import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;


        @Autowired
    private ElasticsearchRestTemplate restTemplate;
    /**
     * 自动补全方法
     **/
    @GetMapping("/suggest")
    public RestResult<List<String>> suggest(String prefix) throws Exception {

        List<String> results = new ArrayList<>();
        //索引名称
        ElasticSearchConfiguration.apiCallIndexNamePrefix = "index_substance_20221010";
        //根据查询内容获取匹配的前10条数据
        CompletionSuggestionBuilder completionSuggestionBuilder = new CompletionSuggestionBuilder(SubstanceSearch.Fields.completion)
                .prefix(prefix)
                .skipDuplicates(true).size(10);
        SuggestBuilder suggestBuilder = new SuggestBuilder()
                .addSuggestion("name_suggest", completionSuggestionBuilder);

        SearchResponse response = restTemplate.suggest(suggestBuilder, IndexCoordinates.of(ElasticSearchConfiguration.apiCallIndexNamePrefix));
        Suggest suggest = response.getSuggest();
        Suggest.Suggestion suggestion = suggest.getSuggestion("name_suggest");
        List<CompletionSuggestion.Entry> entries = suggestion.getEntries();
        entries.forEach(entry -> {
            List<CompletionSuggestion.Entry.Option> options = entry.getOptions();
            options.forEach(option -> {
                results.add(option.getText().toString());
            });
        });

        return RestResultHelper.success(results);
    }

到了这里,关于springboot与es集成操作-基础篇3(动态创建索引)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • SpringBoot+Elasticsearch按日期实现动态创建索引(分表)

    😊 @ 作者: 一恍过去 💖 @ 主页: https://blog.csdn.net/zhuocailing3390 🎊 @ 社区: Java技术栈交流 🎉 @ 主题: SpringBoot+Elasticsearch按日期实现动态创建索引(分表) ⏱️ @ 创作时间: 2023年02月19日 SpringBoot+Elasticsearch,通过 @Document 注解,利用EL表达式指定到配置文件,实现动态生成

    2023年04月08日
    浏览(37)
  • ElasticSearch第八讲 ES索引字段映射类型以及动态映射相关操作

    ES的映射:映射就是 Mapping,它用来定义一个文档以及文档所包含的字段该如何被存储和索引。所以,它其实有点类似于关系型数据库中表的定义。其中ES中映射可以分为动态映射和静态映射,静态映射就是提前创建好对应字段文档映射关系,如果插入的类型不对会出错,而动

    2024年02月10日
    浏览(47)
  • java用es客户端创建索引

    先用java创建esClient 创建es索引模板 新建索引 批量插入数据 1.先批量生成数据 2批量导入方法

    2024年02月11日
    浏览(54)
  • ES映射操作 已创建的ES索引 增加映射字段(类似DB库增加给表增加字段)一样

    ES已存在的索引下添加映射 解释如下:给ticketing_order_info的索引,增加映射字段verificationCodeState,字段类型为integer 实现: PUT /ticketing_order_info/_mapping/ {     \\\"properties\\\": {         \\\"verificationCodeState\\\": {             \\\"type\\\": \\\"integer\\\"         }     } } PUT /ticketing_order_i

    2024年02月16日
    浏览(58)
  • ElasticSearch基础学习(SpringBoot集成ES)

    一、概述 什么是ElasticSearch? ElasticSearch,简称为ES, ES是一个开源的高扩展的 分布式全文搜索引擎 。 它可以近乎实时的 存储、检索 数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB级别 的数据。 ES也使用 Java 开发并使用 Lucene 作为其核心来实现所有索引和搜索的

    2024年02月13日
    浏览(43)
  • 【Elasticsearch】从零开始搭建ES8集群并且集成到Springboot,更好的服务电商类等需要全文索引的项目(一)

    最近公司的电商项目越来越庞大,功能需求点也越来越多,各种C端对查询和检索的要求也越来越高,是时候在项目中引入全文检索了。 ElasticSearch 是一个基于 Lucene 的搜索服务器,它提供了一个分布式多用户能力的全文搜索引擎,并且是基于Java 开发的,我记得很久之前ES还不

    2024年02月15日
    浏览(48)
  • ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入

    导航: 【黑马Java笔记+踩坑汇总】JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 黑马旅游源码:  https://wwmg.lanzouk.com/ikjTE135ybje 目录 1.初识弹性搜索elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 1.1.2.ELK弹性栈 1.1.3.elasticsearch和lucene 1.1.4.搜索引擎技术

    2024年02月01日
    浏览(56)
  • MongoDB创建用户 、数据库、索引等基础操作

    MongoDB的权限认证是相对来说比较复杂的,不同的库创建后需要创建用户来管理。 本机中的MongoDB是docker 启动的,所以先进入docker的镜像中 这样就进入到了镜像MongoDB中,然后输入命令连接MongoDB数据库   注意用户名密码以及数据库名称  出现这个界面说明登录成功 接下来开始

    2024年02月14日
    浏览(47)
  • Java(102):ES7.14,RestHighLevelClient创建索引时报错 create is deprecated

    一、Maven引用 二、遇到问题:ES7.14,RestHighLevelClient创建索引时报错 create  is deprecated \\\'create(org.elasticsearch.action.admin.indices.create.CreateIndexRequest, org.elasticsearch.client.RequestOptions)\\\' is deprecated   出现原因 : 这是因为在使用create方法时 , 会有两个选择 , 其中一个已经过时了 client.indic

    2023年04月09日
    浏览(41)
  • Elasticsearch基础篇(五):创建es索引并学习分析器、过滤器、分词器的作用和配置

    Elasticsearch 是一个分布式搜索和分析引擎,它使用JSON文档来存储数据。索引是Elasticsearch中数据的基本组织单元之一,下面是Elasticsearch索引相关的基本概念: 结构元素 Elasticsearch MySQL 数据库 索引(Index) 数据库(Database) 表格 类型(Type)* 表(Table) 记录/行 文档(Document)

    2024年02月03日
    浏览(91)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包