バージョンフィールドタイプ
version
フィールドタイプは、ソフトウェアバージョン値を処理するための keyword
フィールドの特化型であり、それらのための特化した優先順位ルールをサポートします。優先順位は、セマンティックバージョニング によって概説されたルールに従って定義されており、例えば、メジャー、マイナー、パッチバージョン部分は数値的にソートされます(つまり、”2.1.0” < “2.4.1” < “2.11.2”)およびプレリリースバージョンはリリースバージョンの前にソートされます(つまり、”1.0.0-alpha” < “1.0.0”)。
version
フィールドは次のようにインデックス化されます。
Python
resp = client.indices.create(
index="my-index-000001",
mappings={
"properties": {
"my_version": {
"type": "version"
}
}
},
)
print(resp)
Ruby
response = client.indices.create(
index: 'my-index-000001',
body: {
mappings: {
properties: {
my_version: {
type: 'version'
}
}
}
}
)
puts response
Js
const response = await client.indices.create({
index: "my-index-000001",
mappings: {
properties: {
my_version: {
type: "version",
},
},
},
});
console.log(response);
コンソール
PUT my-index-000001
{
"mappings": {
"properties": {
"my_version": {
"type": "version"
}
}
}
}
このフィールドは、通常のキーワードフィールドと同じ検索機能を提供します。例えば、match
または term
クエリを使用して正確な一致を検索でき、プレフィックスおよびワイルドカード検索をサポートします。主な利点は、range
クエリが Semver の順序を尊重するため、”1.0.0” と “1.5.0” の間の range
クエリは、例えば “1.2.3” のバージョンを含むが、”1.11.2” は含まれないことです。通常の keyword
フィールドを使用してインデックス化する場合、順序はアルファベット順になるため、これは異なることに注意してください。
ソフトウェアバージョンは、セマンティックバージョニングルール スキーマおよび優先順位ルールに従うことが期待されており、特に3つ以上または以下のメインバージョン識別子が許可されるという顕著な例外があります(つまり、”1.2” や “1.2.3.4” は有効なバージョンとして認められますが、厳密な Semver ルールの下ではそうではありません)。Semver 定義の下で有効でないバージョン文字列(例:”1.2.alpha.4”)もインデックス化および正確な一致として取得できますが、すべての有効なバージョンの後に 表示されます。空の文字列 “” は無効と見なされ、すべての有効なバージョンの後にソートされますが、他の無効なものの前にソートされます。
バージョンフィールドのパラメータ
次のパラメータは version
フィールドで受け入れられます:
meta |
フィールドに関するメタデータ。 |
制限事項
このフィールドタイプは、重いワイルドカード、正規表現、またはファジー検索に最適化されていません。これらのタイプのクエリはこのフィールドで機能しますが、これらの種類のクエリに強く依存する場合は、通常の keyword
フィールドを使用することを検討してください。
合成 _source
合成 _source
は、一般的に TSDB インデックス(index.mode
が time_series
に設定されているインデックス)に対してのみ利用可能です。他のインデックスに対しては、合成 _source
は技術プレビュー中です。技術プレビュー中の機能は、将来のリリースで変更または削除される可能性があります。Elastic は問題を修正するために取り組みますが、技術プレビュー中の機能は公式 GA 機能のサポート SLA の対象ではありません。
version
フィールドは、合成 _source
をサポートしますが、copy_to
を宣言しない限りです。
合成ソースは常に version
フィールドをソートし、重複を削除します。例えば:
Python
resp = client.indices.create(
index="idx",
mappings={
"_source": {
"mode": "synthetic"
},
"properties": {
"versions": {
"type": "version"
}
}
},
)
print(resp)
resp1 = client.index(
index="idx",
id="1",
document={
"versions": [
"8.0.0-beta1",
"8.5.0",
"0.90.12",
"2.6.1",
"1.3.4",
"1.3.4"
]
},
)
print(resp1)
Ruby
response = client.indices.create(
index: 'idx',
body: {
mappings: {
_source: {
mode: 'synthetic'
},
properties: {
versions: {
type: 'version'
}
}
}
}
)
puts response
response = client.index(
index: 'idx',
id: 1,
body: {
versions: [
'8.0.0-beta1',
'8.5.0',
'0.90.12',
'2.6.1',
'1.3.4',
'1.3.4'
]
}
)
puts response
Js
const response = await client.indices.create({
index: "idx",
mappings: {
_source: {
mode: "synthetic",
},
properties: {
versions: {
type: "version",
},
},
},
});
console.log(response);
const response1 = await client.index({
index: "idx",
id: 1,
document: {
versions: ["8.0.0-beta1", "8.5.0", "0.90.12", "2.6.1", "1.3.4", "1.3.4"],
},
});
console.log(response1);
コンソール
PUT idx
{
"mappings": {
"_source": { "mode": "synthetic" },
"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"]
}