附录二:支持的集群及索引配置

本文为您介绍阿里云Elasticsearch Serverless检索增强型应用(8.17版)支持的集群配置及索引配置。

集群配置

集群配置用于定义和控制整个Elasticsearch集群的行为,决定了集群的节点管理、数据分片、网络通信、资源分配、安全策略等核心功能,从而确保集群的稳定性、性能、安全性和可扩展性。检索增强型应用(8.17版)支持修改的集群配置如下。

说明

阿里云Elasticsearch Serverless以应用形式管理资源,并无集群概念,但您可使用原生Elasticsearch的如下集群级别配置,调整Elasticsearch Serverless的应用参数。此处为了与原生Elasticsearch保持一致,命名为集群配置。更多集群级别相关的配置,可通过GET/_cluster/settings/include_defaults API查看。

配置项

描述

action.destructive_requires_name

用于控制在执行高危操作时,是否需要指定操作的索引名称,防止误操作删除多个索引或大量数据。取值如下:

说明

高危操作包括删除索引、关闭集群、清除缓存等可能会导致数据丢失或集群不可用的操作。

  • true:需要指定索引名称。使用通配符(*)或 _all 进行模糊匹配时会被系统拒绝,例如,DELETE /my_*

  • false(默认值):无需指定索引名称,可执行模糊匹配。

apack.tenant.index_settings.throw_unsupported_setting

用于控制在创建索引或更新索引配置时,若使用了不支持的配置参数,是否报错。取值如下:

  • true:报错,创建索引或更新索引配置操作失败。

  • false(默认值):不报错,系统会忽略不支持的配置参数,继续创建索引或更新索引配置。

action.auto_create_index

用于控制是否支持自动创建索引。取值如下:

  • true(默认值):支持。当数据写入至不存在的索引时,系统会自动创建该索引。

  • false:不支持。当数据写入至不存在的索引时,系统会报错,您需手动创建该索引后,才能写入数据。

索引配置

背景信息

Elasticsearch中,您可将结构相似的文档组织到同一个索引中,便于快速查询和搜索指定内容。索引的MappingSettings则是定义索引行为和结构的核心操作,它们共同决定了数据如何被存储、查询和管理。

  • Mapping:定义索引中文档的结构,即字段的数据类型(例如, textintegerdate 等)和行为(例如,是否分词、是否存储原始值、是否支持排序或聚合等)。

  • Settings:定义索引级别的全局行为和相关约束,控制索引的存储、性能、可用性以及与数据相关的高级规则。相关配置将直接影响数据如何分布、搜索如何执行,以及资源如何分配。

您可参考本文,了解检索增强型应用(8.17版)支持的字段数据类型索引配置

说明

更多索引的创建及配置,请参见Update index settings APIUpdate index settings API

支持的字段数据类型

字段数据类型(Field Data Types)决定了数据在Elasticsearch的存储和查询方式。检索增强型应用(8.17版)支持的字段数据类型如下。

类别

字段数据类型

描述

数值类型

byte

8位有符号整数,取值为-128~127。用于存储小范围的整数。

short

16位有符号整数,取值为-32,768~32,767。用于存储中等范围的整数。

integer

32位有符号整数,取值为-231~231-1。用于存储通用类型的整数。例如,库存量、订单号。

long

64位有符号整数,取值为-263~263-1。用于存储大量数值的整数(例如,Unix时间戳、IP地址)。

half_float

16位浮点数,精度较低。用于存储较小的浮点值,节省存储空间。

float

32位浮点数,单精度。用于存储较高精度的浮点值。例如,温度、价格。

double

64位浮点数,双精度。用于存储高精度数据。例如,科学计算、金融计算。

scaled_float

进行压缩存储的浮点值,较节省存储空间。

unsigned_long

64位无符号整数,取值为0~264-1。用于存储非负整数。例如,超大ID。

范围类型

integer_range

存储整数范围,包含起始值和结束值,用于整数区间查询。例如,年龄区间。

float_range

存储浮点数范围,包含起始值和结束值,用于浮点数区间查询。例如,包含小数的温度范围、价格区间。

long_range

存储长整数范围,包含起始值和结束值,用于大整数区间查询。例如,查询订单ID在指定区间内的记录。

double_range

存储双精度浮点数范围,包含起始值和结束值,用于高精度的数值区间查询。例如,金融数据中的价格波动范围199.99 ~ 999.99

ip_range

存储IP地址范围,用于IP地址段匹配。例如,屏蔽指定范围的IP地址。

date_range

存储日期范围,包括开始时间和结束时间,用于时间区间查询。例如,活动时间、订单有效期。

子数据类型

说明

用于处理嵌套或复杂结构的数据。

object

存储JSON对象,包含无结构化的嵌套数据。例如,用户配置信息。

nested

可查询的嵌套对象,支持独立索引。用于存储多个独立子对象。例如,产品评论、订单详情。

文本与关键词类型

text

用于全文搜索,支持分词。适用于非结构化内容,例如,商品描述、文章内容。

keyword

用于精确匹配,不进行分词。适用于结构化内容,例如,ID、邮箱地址。

constant_keyword

用于存储索引中值相同的固定值(即所有文档的该字段必须具有相同值)。例如,版本号、环境标识production

match_only_text

适用于全文搜索,但无需存储或高亮显示的搜索场景。该方式能够有效节省存储空间,提升搜索性能。

日期与时间类型

date

日期时间格式,精确到毫秒。用于存储时间序列数据(例如,日志数据)或事件的日期。

date_nanos

日期时间格式,精确到纳秒。用于存储高精度时间戳,例如,金融交易。

二进制类型

binary

可直接存储原始二进制数据(例如,二进制日志)。

布尔类型

boolean

存储布尔值(truefalse),用于条件过滤、判断开关状态等。

地理位置类型

geo_point

存储地理坐标(即单个点的经纬度),用于位置点查询。例如,商店坐标。

geo_shape

存储复杂几何形状(例如,多边形),用于区域匹配。例如,行政区边界查询。

point

存储地理坐标(即单个点的经纬度),用于位置点查询,常用于关联字段。例如,订单与配送地址关联。

IP与网络类型

ip

用于IPv4IPv6地址的存储与查询。

向量类型

dense_vector

存储密集向量,常用于机器学习。例如,图像向量、文本嵌入。

sparse_vector

存储稀疏向量(仅存储非零值和索引),常用于高维稀疏数据。例如,文本特征。

其他类型

flattened

存储嵌套对象或数组。用于非常规聚合或存储非结构化数据。

wildcard

基于通配符的文本匹配查询,用于在字段中查找符合特定模式的文本。例如, 使用"?at" 匹配 cat 或 hat

shape

存储地理空间几何形状(例如,多边形、线、区域等),用于处理复杂的地理区域范围和空间关系查询。

alias

别名可用于指向一个或多个索引,后续通过一个别名,即可统一查询多个索引的数据。

例如,将log_2025_01log_2025_02等索引的别名设置为all_logs,查询all_logs,即可获取所有相关的日志数据。

version

用于控制文档更新的并发性和数据一致性,常用于冲突检测,避免多个客户端同时修改同一文档所导致的数据覆盖或不一致问题。

支持的索引配置

检索增强型应用(8.17版)支持的索引配置分为映射限制配置索引通用配置两类,您可按需配置。

映射限制配置

索引映射限制相关的配置项,用于限制字段映射的数量,避免映射字段过多,导致索引性能下降。检索增强型应用(8.17版)支持的映射限制配置如下。

配置项

描述

index.mapping.field_name_length.limit

用于设置字段名的最大长度,防止字段名过长,占用过多内存。

index.mapping.depth.limit

用于设置嵌套字段(即nested类型字段)的最大层级,限制嵌套对象的复杂性,避免内存溢出。默认为20级。

index.mapping.nested_fields.limit

用于设置嵌套字段(即nested类型字段)的最大数量,防止嵌套映射过多,导致查询性能下降。默认为50个。

index.mapping.nested_objects.limit

用于设置单个文档中嵌套对象的最大数量,避免文档包含过多嵌套对象,导致内存不足。默认为10,000个。

index.mapping.total_fields.limit

用于设置索引中的最大字段数,防止字段过多,导致索引膨胀影响查询性能。默认为1,000个。

index.mapping.coerce

是否强制转换输入值的字段类型(例如,将字符串 "123" 转换为数值 123)。取值如下:

  • true:转换,将当前字段的输入值,转换为该字段所定义的类型。

  • false(默认值):不转换,直接以输入值的原始类型存储,若类型不匹配可能会产生报错。

index.mapping.ignore_malformed

是否忽略不符合字段类型的数据,取值如下:

  • true:忽略,即允许插入类型错误的数据,但该数据不会被索引。

  • false(默认值):不忽略,即不允许插入类型错误的数据,且会产生报错,影响其他数据的插入。

索引通用配置

索引通用配置用于定义索引的底层行为和资源分配(例如,分片数量、分词规则等),合理的配置索引有助于提升查询及写入性能、提高资源利用率、高效管理数据。检索增强型应用(8.17版)支持的索引通用配置如下。

类别

配置项

描述

索引核心配置

index.number_of_shards

用于设置索引的主分片数,控制数据分布和并行处理能力。默认为1

index.codec

用于设置使用哪种压缩格式来存储数据。取值如下:

  • default(默认值):中等压缩,适用于需要快速检索且存储空间充足的场景。

  • best_compression:极高压缩,适用于索引读取不频繁或存储受限的场景。

index.refresh_interval

用于设置分片数据从内存刷新到磁盘的时间间隔,可调整写入性能及查询实时性。默认为1s

分析器与管道

index.analysis.*

自定义分析器、分词器、过滤器等,用于控制文本字段的分词规则。

index.default_pipeline

插入文档时默认使用的数据管道,用于系统预处理数据(例如,格式转换、字段计算)。

index.final_pipeline

文档插入后的最终处理管道,用于确保数据符合规范(例如,过滤加密或敏感字段)。

查询与排序

index.query.default_field

定义当所查询的字符串未指定字段时,默认会匹配哪些字段。例如,将查询语句 query: "text" 自动匹配到 content 字段。

index.sort.*

定义文档在分片内的排序规则,用于加速查询(例如,按时间排序)。

索引阻塞

index.blocks.*

限制对某个索引可执行的操作类型(例如,写入、删除、元数据访问),用于维护或调试场景下临时锁定索引。

索引性能

index.max_adjacency_matrix_filters

用于设置邻接矩阵查询的复杂度阈值,防止因条件过多或较复杂,导致内存溢出或性能下降。默认为1,000条。

index.max_docvalue_fields_search

单个搜索请求中最大允许的docvalue_fields数量,用于限制聚合查询的资源消耗。默认为100

说明

docvalue_fields 是一个搜索参数,用于在搜索结果中返回指定字段的原始值。

index.max_inner_result_window

用于设置嵌套查询或聚合中inner_hits的最大结果窗口大小,以限制复杂查询的内存使用。默认为100

说明

inner_hits用于在嵌套查询的上下文中,检索嵌套文档的具体信息。

index.max_ngram_diff

用于设置Ngram分词器中分片长度的最大差值,防止因分词器配置不当导致索引膨胀或性能下降。

index.max_refresh_listeners

用于设置单个索引的最大刷新监听器数量,避免监听器过多,影响刷新性能。

index.max_regex_length

用于设置正则表达式或前缀查询的最大长度,防止相关内容较长,影响查询速度。默认为1,000

index.max_rescore_window

用于设置重评分操作(即通过更复杂的评分模型重新排序结果)的最大文档窗口大小,以限制该过程的资源消耗。默认为10,000

index.max_result_window

用于设置分页查询的最大结果窗口大小,防止高开销的分页查询,例如,from: 100000, size: 10。默认为10,000

index.max_script_fields

用于设置单个搜索请求中脚本字段的最大数量,限制脚本计算的资源消耗。默认为32

index.max_shingle_diff

用于控制Shingle分词器中分片长度的最大差值,防止分词器生成过多组合词。默认为3

index.max_terms_count

用于设置单个查询或聚合中,允许添加的最大条件数,避免条件列表过大导致内存不足,影响性能。默认为65,536

index.max_prefix_length

用于设置前缀查询的最大长度,防止前缀超长,影响查询性能。默认为0,表示无限制。

index.max_wildcard_length

用于设置通配符查询的最大长度,限制通配符查询的复杂度,避免全表扫描。默认为10