version 字段类型
version 字段类型是 keyword 字段的一种特化,用于处理软件版本值并支持它们专用的优先规则。优先规则遵循语义化版本控制(Semantic Versioning)概述的规则,例如主版本、次版本和补丁版本部分按数值排序(即 "2.1.0" < "2.4.1" < "2.11.2"),预发布版本排在发布版本之前(即 "1.0.0-alpha" < "1.0.0")。
你可以按如下方式索引 version 字段:
PUT my-index-000001
{
"mappings": {
"properties": {
"my_version": {
"type": "version"
}
}
}
}
该字段提供与普通 keyword 字段相同的搜索功能。例如,可以使用 match 或 term 查询搜索精确匹配,并支持前缀和通配符搜索。主要好处是范围查询会遵循 Semver 排序,因此 "1.0.0" 和 "1.5.0" 之间的范围查询会包含 "1.2.3" 之类的版本,但不会包含 "1.11.2"。注意,如果使用普通 keyword 字段进行索引(其排序是字母序),情况会有所不同。
软件版本应遵循语义化版本控制的模式规则和优先规则,一个显著的例外是允许多于或少于三个主版本标识符(即 "1.2" 或 "1.2.3.4" 被视为有效版本,而按照严格的 Semver 规则它们则不是)。在 Semver 定义下无效的版本字符串(例如 "1.2.alpha.4")仍可以被索引并作为精确匹配检索,但是它们都会以常规字母序出现在任何有效版本之后。空字符串 "" 被视为无效,排在所有有效版本之后,但排在其他无效版本之前。
version 字段的参数
version 字段接受以下参数:
meta(可选,对象)关于该字段的元数据。
限制
此字段类型没有针对繁重的通配符、正则表达式或模糊搜索进行优化。虽然这些类型的查询在此字段上可以工作,但如果你非常依赖这些类型的查询,应考虑使用普通的 keyword 字段。
合成 _source
version 字段在其默认配置下支持合成 _source。
合成 source 可能会对 version 字段的值进行排序并删除重复项。例如:
PUT idx
{
"settings": {
"index": {
"mapping": {
"source": {
"mode": "synthetic"
}
}
}
},
"mappings": {
"properties": {
"versions": { "type": "version" }
}
}
}
PUT idx/_doc/1
{
"versions": ["8.0.0-beta1", "8.5.0", "0.90.12", "2.6.1", "1.3.4", "1.3.4"]
}
将变为:
{
"versions": ["0.90.12", "1.3.4", "2.6.1", "8.0.0-beta1", "8.5.0"]
}