一、先上代码

    @PostConstruct
    public void createTemporaryIndex() {
        String CONFIG = "es.mapper/grayscale.xml";
        ClientInterface clientUtil = bbossESStarter.getConfigRestClient(CONFIG);

        String mapping = clientUtil.getIndice(EsConstant.ES_GRAYSCALE_LOG_INDEX.getText());
        if (StringUtils.isEmpty(mapping)) {
            clientUtil.createIndiceMapping(EsConstant.ES_GRAYSCALE_LOG_INDEX.getText(),
                    "grayscaleMapping");
            mapping = clientUtil.getIndice(EsConstant.ES_GRAYSCALE_LOG_INDEX_ALIAS.getText());
            if (StringUtils.isEmpty(mapping)) {
                //添加索引的别名
                String s = clientUtil.addAlias(EsConstant.ES_GRAYSCALE_LOG_INDEX.getText(), EsConstant.ES_GRAYSCALE_LOG_INDEX_ALIAS.getText());
                log.info("添加灰度索引别名:{}",s);
            }
        }

    }

二、具体思路

大体思路就是在启动spring项目的时候,先判断es的索引存不存在,不存在创建改索引,然后判断别名存不存在,不存在创建别名。

@PostConstruct

该注解是spring初始化的时候会执行带注解的方法,可以理解为你启动项目就会执行

String CONFIG = "es.mapper/grayscale.xml";

你的创建es索引的具体结构
在这里插入图片描述

<property name="grayscaleMapping">
        <![CDATA[
            {
                "settings": {
                    "analysis": {
                        "analyzer": {
                            "ngram_analyzer": {
                                "filter": [
                                    "lowercase"
                                ],
                                "tokenizer": "ngram_tokenizer"
                            }
                        },
                        "tokenizer": {
                            "ngram_tokenizer": {
                                "token_chars": [
                                    "letter",
                                    "digit"
                                ],
                                "min_gram": "1",
                                "type": "ngram",
                                "max_gram": "1"
                            }
                        }
                    }
                },
                "mappings": {
                    "_doc": {
                        "properties": {
                            "context": {
                                "type": "text",
                                "analyzer": "ngram_analyzer"
                            },

                            "operationName": {
                                "type": "text",
                                "analyzer": "ngram_analyzer"
                            },

                            "createTime": {
                                "type": "long"
                            },
                            "operationCrmid": {
                                "type": "keyword"
                            },
                            "logType": {
                                "type": "long"
                            }
                        }
                    }

                }
            }
        ]]>
    </property>
        String mapping = clientUtil.getIndice(EsConstant.ES_GRAYSCALE_LOG_INDEX.getText();

EsConstant.ES_GRAYSCALE_LOG_INDEX.getText()
是你的索引名称String类型,这个没直接用String,而是用的枚举获取的。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐