当前位置: 首页 > news >正文

elasticsearch 7.17 索引模板

文章目录

    • 概要

概要

模板

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.introns.framework.es.builder.OperationsBuilder;
import java.util.HashMap;
import java.util.Map;

abstract class AbstractBuilder<T extends AbstractBuilder<T>> {
  protected final Map<String, Object> map;
  protected final OperationsBuilder builder;

  protected AbstractBuilder(OperationsBuilder builder) {
    this.map = new HashMap<>();
    this.builder = builder;
  }

  protected abstract T self();

  public OperationsBuilder unwrap() {
    return builder;
  }

  public T set(String key, Object value) {
    if (StrUtil.isNotBlank(key) && ObjectUtil.isNotEmpty(value)) {
      map.put(map, value);
    }

    return this.self();
  }

  public Map<String, Object> build() {
    return map;
  }
}
import cn.introns.framework.es.builder.OperationsBuilder;
import lombok.extern.slf4j.Slf4j;

/**
 * SettingsBuilder<br>
 * <a
 * href='https://www.elastic.co/guide/en/elasticsearch/reference/7.17/index-modules.html#index-modules-settings'>elasticsearch
 * 7.17 document</a>
 * @since 3.0.2
 */
@Slf4j
public class SettingsBuilder extends AbstractBuilder<SettingsBuilder> {
  @Override
  protected SettingsBuilder self() {
    return this;
  }

  public SettingsBuilder(OperationsBuilder builder) {
    super(builder);
  }

  // static index settings

  /**
   * 设置分片数量<br>
   *
   * <ul>
   *   <li>索引应具有的主分片数。默认为1。此设置只能在索引创建时设置。它不能在已关闭的索引上更改
   *   <li>每个索引的分片数量限制为1024个。此限制是一个安全限制,用于防止意外创建索引,这些索引可能会因资源分配而破坏集群的稳定。可以通过在属于集群的每个节点上指定export
   *       ES_JAVA_OPTS=“-Des.index.max_number_of_shard=128”系统属性来修改限制
   * </ul>
   *
   * @param value 分片数量
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setNumberOfShards(int value) {
    if (value < 0 || value > 1024) {
      log.warn("number_of_shards value range [1, 1024], current value {}, do not set", value);
      return this;
    }

    return this.set("number_of_shards", value);
  }

  /**
   * 此设置的默认值取决于索引中主分片的数量。默认设置允许您按2的倍数分割,最多可分割1024个分片<br>
   *
   * @param value 分片数量
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setNumberOfRoutingShards(int value) {
    if (value < 2 || value > 1024) {
      log.warn(
          "number_of_routing_shards value range [2, 1024], current value {}, do not set", value);
      return this;
    }

    return this.set("number_of_routing_shards", value);
  }

  /**
   * 用于定义索引数据在磁盘上的压缩算法,默认值 LZ4
   *
   * @param value 压缩算法
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setCodec(String value) {
    return this.set("codec", value);
  }

  /**
   * 平衡数据分布优化查询性能<br>
   * 取值范围<code>1 <= routing_partition_size < number_of_shards</code>
   *
   * <ul>
   *   <li>默认情况下,使用自定义路由的文档会根据路由值的哈希结果分配到唯一主分片,可能导致数据倾斜
   *   <li>通过设置该值,相同路由值的文档会被分散到多个分片中,缓解数据集中问题
   * </ul>
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setRoutingPartitionSize(int value) {
    if (value < 0 || value >= 1024) {
      log.warn(
          "routing_partition_size value range [1, number_of_shards), current value {}, do not set",
          value);
      return this;
    }
    return this.set("routing_partition_size", value);
  }

  /**
   * 控制索引软删除功能<br>
   * 适用版本<code>6.5.0 ~ 7.6.0</code>
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  @Deprecated
  public SettingsBuilder setSoftDeletesEnabled(boolean value) {
    return this.set("soft_deletes.enabled", value);
  }

  /**
   * 控制软删除记录保留时间,默认值 12h<br>
   * 单位支持 h(时) | m(分) | s(秒)<br>
   * 适用版本<code>7.6.0 ~</code>
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setSoftDeletesRetentionLeasePeriod(String value) {
    return this.set("soft_deletes.retention_lease.period", value);
  }

  /**
   * 控制嵌套查询性能优化行为,默认值 true<br>
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setLoadFixedBitsetFiltersEagerly(boolean value) {
    return this.set("load_fixed_bitset_filters_eagerly", value);
  }

  /**
   * 用于在分片启动时执行严格的数据完整性检查,专家级参数<br>
   * 可选的值有 false checksum true ,默认值 false
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setShardCheckOnStartup(String value) {
    return this.set("shard.check_on_startup", value);
  }

  // dynamic index settings

  /**
   * 用于控制每个主分片的副本数量,默认值 1<br>
   * 可以调用api动态修改无需重启<br>
   *
   * <ul>
   *   <li>推荐至少 1,确保每个主分片至少有一个副本
   *   <li>副本数应该小于等于集群节点数 - 1,例如3割接点集群最多支持每个主分片2个副本
   * </ul>
   *
   * @param value 副本数量
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setNumberOfReplicas(int value) {
    return this.set("number_of_replicas", value);
  }

  /**
   * 用于动态调整索引副本数的配置<br>
   *
   * <ul>
   *   <li>范围模式,值 0-5 即副本数在0到5之间自动调整;0-all 即副本数最小0,最大不超过当前节点数 - 1
   *   <li>默认值 false
   * </ul>
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setAutoExpandReplicas(String value) {
    return this.set("auto_expand_replicas", value);
  }

  /**
   * 用于控制分片空闲状态的参数,默认值 30s
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setSearchIdleAfter(String value) {
    return this.set("search.idle.after", value);
  }

  /**
   * 控制索引刷新频率的核心参数,直接影响数据的实时可见性和写入性能,默认值 1s
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setRefreshInterval(String value) {
    return this.set("refresh_interval", value);
  }

  /**
   * 限制分页查询深度,默认值 10000 即当分页查询的起始偏移量(from)与每页大小(size)之和超过该值时,请求会被拒绝<br>
   *
   * <ul>
   *   <li>基于经验值,平衡用户体验与系统安全。大多数场景下,用户不会浏览超过前 1000 页(假设每页 10 条)
   * </ul>
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setMaxResultWindow(int value) {
    return this.set("max_result_window", value);
  }

  /**
   * 用于限制内部命中(inner hits)和聚合(top_hits)结果页深度,默认值 100<br>
   * 增大该值会增加内存再用(尤其是聚合或嵌套文档较多时)
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setMaxInnerResultWindow(int value) {
    return this.set("max_inner_result_window", value);
  }

  /**
   * 用于限制重评分操作窗口大小,默认值 10000
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setMaxReScoreWindow(int value) {
    return this.set("max_rescore_window", value);
  }

  /**
   * 用于限制单个查询中可请求的<code>doc_value_fields</code>数量,以避免因过度资源消耗导致集群性能下降,默认值 100
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setMaxDocValueFieldsSearch(int value) {
    return this.set("max_docvalue_fields_search", value);
  }

  /**
   * 用于限制单个查询中通过脚本动态生成字段(script_fields)的数量,以防止因过度计算导致集群性能下降,默认值 32
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setMaxScriptFields(int value) {
    return this.set("max_script_fields", value);
  }

  /**
   * 用于控制NGram分词器(NGram Tokenizer)和NGram过滤器(NGram TokenFilter)的最小和最大长度差值的索引级配置<br>
   * 限制在 NGram 分词器或过滤器中,min_gram(最小 n-gram 长度)和 max_gram(最大 n-gram 长度)之间的差值上限<br>
   * 默认值 1(即 <code>max_gram - min_gram <= 1</code>)
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setMaxNgramDiff(int value) {
    return this.set("max_ngram_diff", value);
  }

  /**
   * 用于控制<code>Shingle Token Filter</code>(词片过滤器)中允许的<code>max_shingle_size</code>和<code>
   * min_shingle_size</code>最大差值的索引级配置<br>
   *
   * <uL>
   *   <li>默认值 3,即<code>max_shingle_size - min_shingle_size <= 3</code>
   * </uL>
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setMaxShingleDiff(int value) {
    return this.set("max_shingle_diff", value);
  }

  /**
   * 用于控制分片级刷新监听器数量上限的索引级配置,默认值 1000,即elasticsearch 默认将每个分片最多 1000 个监听器<br>
   * 限制每个分片上可同时存在的刷新监听器的最大数量
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setMaxRefreshListeners(int value) {
    return this.set("max_refresh_listeners", value);
  }

  /**
   * 用于控制<code>_analyze</code> API 分词结果最大数量,默认值 10000,即 10000 个词元<br>
   * 限制通过<code>_analyze</code> API 分析文本时,单个请求可生成的词元(Token)的最大数量
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setAnalyzeMaxTokenCount(int value) {
    return this.set("analyze.max_token_count", value);
  }

  /**
   * 用于控制高亮功能处理文本长度上线的索引级设置,默认值 1000000 即 1000000 个字符<br>
   * 限制在高亮请求中,对单个字段内容进行分析的最大字符数量,超过此限制的文本本分将不会被分析和高亮
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setHighlightMaxAnalyzedOffset(int value) {
    return this.set("highlight.max_analyzed_offset", value);
  }

  /**
   * 用于控制<code>Terms Query</code>(多词项精确匹配查询)中允许使用的最大词项数量的索引级配置,默认值 65536 即64k个词项<br>
   * 限制<code>Terms Query</code>中一次查询可指定的词项(Terms)的最大数量<br>
   * 适用于处理需要匹配大量精确值的查询(如Id过滤、标签匹配等)
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setMaxTermsCount(int value) {
    return this.set("max_terms_count", value);
  }

  /**
   * 用于限制正则表达式查询<code>Regexp Query</code>中正则表单时长度的索引级设置,默认值 1000,超过此长度的正则表达式会触发错误<br>
   * 限制在<code>Regexp Query</code>中使用正则表单时的最大字符长度,防止因复杂或过长的正则表单时导致性能问题或资源耗尽<br>
   * 适用于需要自定义正则表达式复杂度的业务场景,如日志分析,文本模式匹配
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setMaxRegexLength(int value) {
    if (value < 0 || value > 32733) {
      log.warn("max_regex_length value range [1, 32733], current value {}, do not set", value);
      return this;
    }
    return this.set("max_regex_length", value);
  }

  /**
   * 用于控制默认搜索字段范围,默认值 *<br>
   *
   * <ul>
   *   <li>通配符模式
   *   <li>具体字段名
   *   <li>字段名数组,多个字段中也可以是具体字段名和统配符模式字段
   * </ul>
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setQueryDefaultField(Object value) {
    return this.set("query.default_field", value);
  }

  /**
   * 用于控制索引分片分配策略,默认值 all,即允许所有分片被分配到节点(主分片和副分片)<br>
   * 可选值 all primaries replicas none
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setRoutingAllocationEnable(String value) {
    return this.set("routing.allocation.enable", value);
  }

  /**
   * 用于控制索引分片重新平衡策略,默认值 all,即允许所有分片参与重新平衡(主分片和副分片)<br>
   * 可选值 all primaries replicas none
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setRoutingReBalanceEnable(String value) {
    return this.set("routing.rebalance.enable", value);
  }

  /**
   * 用于控制已删除文档版本号保留时间的索引设置,默认值 60s<br>
   * 单位支持 h(时) | m(分) | s(秒)<br>
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setGcDeletes(String value) {
    return this.set("gc_deletes", value);
  }

  /**
   * 用于定义索引文档时默认使用的处理管道设置,默认空<br>
   * 可选值 已经存在的管道名称 _none null(空)
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setDefaultPipeline(String value) {
    return this.set("default_pipeline", value);
  }

  /**
   * 用于定义索引文档时必须经过的最终处理管道,默认空,不强制使用任何最终管道
   *
   * <ul>
   *   <li>特殊值 _none 标识禁用所有管道
   * </ul>
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setFinalPipeline(String value) {
    return this.set("final_pipeline", value);
  }

  /**
   * 用于控制索引是否默认隐藏,隐藏索引在通配符匹配<code>(GET *)</code>是不会自动返回,需要显式指定<code>expand_wildcards</code>
   * 参数才能访问,默认值 false<br>
   * 可选值 open closed hidden none all
   *
   * @param value 值
   * @return {@link SettingsBuilder}
   */
  public SettingsBuilder setHidden(String value) {
    return this.set("hidden", value);
  }
}
http://www.dtcms.com/a/106677.html

相关文章:

  • 一段式端到端自动驾驶:UniAD:Planning-oriented Autonomous Driving
  • python函数装饰器
  • (linux操作系统)环境变量
  • 【NS3-如何在NS3中模拟每个节点的本地时钟?
  • 自动获取屏幕尺寸信息的html文件
  • [图文]directed不是direct-《分析模式》漫谈50
  • 算法刷题记录——LeetCode篇(3.10) [第291~300题](持续更新)
  • 【Java中级】10章、内部类、局部内部类、匿名内部类、成员内部类、静态内部类的基本语法和细节讲解配套例题巩固理解【5】
  • 《AI大模型应知应会100篇》第7篇:Prompt Engineering基础:如何与大模型有效沟通
  • SAP BDC应用1-批量处理财务三大报表
  • Java 代理模式 详解
  • 4.2学习总结
  • Vue与React区别分析
  • 机器学习开发全流程详解:从数据到部署的完整指南
  • el-dialog实现遮罩层后面的内容也能点击
  • SqlServer整库迁移至Oracle
  • 鹧鸪云光伏仿真软件场外设计功能:构建系统级工程闭环
  • time.sleep(10)和 async 区别
  • 通信算法之251: 时频图谱spectrogram(如短时傅里叶变换STFT)
  • 数据结构——队列的实现
  • LeetCode算法题(Go语言实现)_26
  • LLM大模型之精度问题(FP16,FP32,BF16)详解与实践
  • Mapreduce的使用
  • 深入理解归并排序:分治艺术的经典实践
  • 【AI产品分享】面向图片的原始位置翻译功能
  • Redisson中BitMap位图的基本操作
  • CORS与OPTIONS请求
  • 蓝桥杯 游戏 6251 单调队列
  • .NET 创建MCP使用大模型对话
  • 【计网速通】计算机网络核心知识点与高频考点——数据链路层(二)