首页 > 编程知识 正文

elasticsearch自动创建索引,创建springboot的三种方式

时间:2023-05-05 03:33:38 阅读:194422 作者:3949

已经在上一篇文件讲述了springboot整合elasticsearch时,包括elasticsearch的搭建,springboot整合到elasticsearch。

文章地址:https://blog.csdn.net/chenxihua1/article/details/94546282#commentBox

这里我将讲述springboot 整合elasticsearch 创建索引的方式。

elasticsearch创建索引,是有很多种方式的。

比如常用的是使用postman提交put请求,我的上一篇文章就是用这种方法。

现在介绍第二种,比较合适项目开发的创建索引的方式:

 

1: 新建索引实体类

package com.gosuncn.esdemo.domin;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.springframework.data.annotation.Id;import org.springframework.data.elasticsearch.annotations.Document;import org.springframework.data.elasticsearch.annotations.Field;import org.springframework.data.elasticsearch.annotations.FieldType;/** * 这个创建索引的过程,最主要是从 @Document 注解中的 createIndex = false 这个属性开始, * 因为 createIndex默认是true, 所以项目启动的时候,默认就会初始化这个索引,(但是此时还没有加 settings 等设置) * 所以,就必须把它设置为 false。 */@Data@NoArgsConstructor@AllArgsConstructor@Document(indexName = "local_library", type = "book", shards = 4, createIndex = false)public class Library { /** * index:是否设置分词 * analyzer:存储时使用的分词器 * ik_max_word * ik_word * searchAnalyze:搜索时使用的分词器 * store:是否存储 * type: 数据类型 */ @Id @Field(type = FieldType.Integer) private Integer book_id; @Field(store = true, analyzer = "myanalyzer", type = FieldType.text) private String book_code; @Field(store = true, analyzer = "myanalyzer", type = FieldType.text) private String book_name; @Field(store = true, analyzer = "myanalyzer", type = FieldType.Integer) private Integer book_price; @Field(store = true, analyzer = "myanalyzer", type = FieldType.text) private String book_author; @Field(store = true, analyzer = "myanalyzer", type = FieldType.text) private String book_desc;}

看到类的头部注解信息,如注解信息所示。 在启动项目时,如果 @Document 注解中的  createIndex属性为true,它会自动创建索引。 所有我这里要设置它为false,禁止它自己创建索引。

2: 新建索引

在项目启动的时候,判断是否已经存在索引了,如果不存在就新建。

package com.gosuncn.esdemo.init;import com.gosuncn.esdemo.constant.EsData;import com.gosuncn.esdemo.domin.Library;import com.sun.org.apache.xml.internal.security.Init;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.CommandLineRunner;import org.springframework.core.annotation.Order;import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;import org.springframework.stereotype.Component;import org.springframework.stereotype.Service;import javax.annotation.PostConstruct;import java.util.Map;/** * @ClassName: InitIndex * @Create By: chenxihua * @Author: Administrator * @Date: 2019/11/29 10:15 **/@Component@Order(value = 0)public class InitIndex implements CommandLineRunner { private static final Logger logger = LoggerFactory.getLogger(InitIndex.class); @Autowired ElasticsearchTemplate elasticsearchTemplate; /** * 项目启动的时候,如果elasticsearch已经存有索引,则不做任何操作 * 如果没有索引,则新建索引 * @param args * @throws Exception */ @Override public void run(String... args) throws Exception { boolean indexExists = elasticsearchTemplate.indexExists(Library.class); if (indexExists){ logger.warn("存在索引"); }else { logger.warn("索引不存在。。。"); try { boolean index = elasticsearchTemplate.createIndex(Library.class, EsData.DEFAULT_SETTING); boolean putMapping = elasticsearchTemplate.putMapping(Library.class); if (index && putMapping){ logger.info("索引创建成功。。。"); }else { logger.warn("索引创建失败。。。"); } }catch (Exception e){ logger.error("error: {}", e.getLocalizedMessage()); } } }}

这里是使用了 elasticsearchTemplate 里面的方法。 elasticsearchTemplate里面有很多方法是很好用的。如图:

然后索引中的setting设置如下:

/** * @ClassName: EsData * @Create By: chenxihua * @Author: Administrator * @Date: 2019/11/29 10:24 * * 这里设置默认常量 * **/public class EsData { /** * 记录一次我设置的setting, 其实在 DEFAULT_SETTING 的最外层,是不再需要 {"setting"} 的了 */ public static final String DEFAULT_SETTING = "{" + ""analysis": {" + ""analyzer": {" + ""myanalyzer": {" + ""tokenizer": "mytokenizer"" + "}" + "}," + ""tokenizer": {" + ""mytokenizer": {" + ""type": "ngram"," + ""min_gram": 1," + ""max_gram": 2," + ""token_chars": [" + ""letter"," + ""digit"," + ""whitespace"," + ""punctuation"," + ""symbol"" + "]" + "}" + "}" + "}" + "}";}

这样就可以完成 elasticsearch中创建索引的时候,自定义settings的设置了。

 

要了解我的这篇博客,请看我的第一篇博客《springboot整合elasticsearch5.x以及IK分词器做全文检索》
上一篇的创建索引方式,是使用postman的put方式,这种方式,不符合生产环境。 所以这篇文章,将创建索引的方式,整合到项目启动时候创建自定义的方式。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。