首页 > 解决方案 > spring data elasticsearch动态分片,副本

问题描述

@Document(indexName = "#{indexName.getBanIndexName()}",
        shards = 3,
        replicas = 2,
        refreshInterval = "-1")

.

package org.springframework.data.elasticsearch.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.elasticsearch.index.VersionType;

import org.springframework.data.annotation.Persistent;

@Persistent
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE })
public @interface Document {

    String indexName();

    String type() default "";

    boolean useServerConfiguration() default false;

    short shards() default 5;

    short replicas() default 1;

    String refreshInterval() default "1s";

    String indexStoreType() default "fs";

    boolean createIndex() default true;

    VersionType versionType() default VersionType.EXTERNAL;
}

我想使用@annotation 为每个部署环境动态注入分片和副本。

有没有办法将值动态注入到属于@annotation 的short 类型的shards 字段中?

标签: javaspring

解决方案


您应该使用useServerConfiguration=true 来控制基于部署环境的索引创建。你也可以调用

PUT _index_template/template_1
{
  "index_patterns": ["YOUR_INDEX_PATTERN"],
  "template": {
    "settings": {
      "number_of_shards": 3
    }
}

在启动您的存储库之前


推荐阅读