バージョンフィールドタイプ

version フィールドタイプは、ソフトウェアバージョン値を処理するための keyword フィールドの特化型であり、それらのための特化した優先順位ルールをサポートします。優先順位は、セマンティックバージョニング によって概説されたルールに従って定義されており、例えば、メジャー、マイナー、パッチバージョン部分は数値的にソートされます(つまり、”2.1.0” < “2.4.1” < “2.11.2”)およびプレリリースバージョンはリリースバージョンの前にソートされます(つまり、”1.0.0-alpha” < “1.0.0”)。

version フィールドは次のようにインデックス化されます。

Python

  1. resp = client.indices.create(
  2. index="my-index-000001",
  3. mappings={
  4. "properties": {
  5. "my_version": {
  6. "type": "version"
  7. }
  8. }
  9. },
  10. )
  11. print(resp)

Ruby

  1. response = client.indices.create(
  2. index: 'my-index-000001',
  3. body: {
  4. mappings: {
  5. properties: {
  6. my_version: {
  7. type: 'version'
  8. }
  9. }
  10. }
  11. }
  12. )
  13. puts response

Js

  1. const response = await client.indices.create({
  2. index: "my-index-000001",
  3. mappings: {
  4. properties: {
  5. my_version: {
  6. type: "version",
  7. },
  8. },
  9. },
  10. });
  11. console.log(response);

コンソール

  1. PUT my-index-000001
  2. {
  3. "mappings": {
  4. "properties": {
  5. "my_version": {
  6. "type": "version"
  7. }
  8. }
  9. }
  10. }

このフィールドは、通常のキーワードフィールドと同じ検索機能を提供します。例えば、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.modetime_series に設定されているインデックス)に対してのみ利用可能です。他のインデックスに対しては、合成 _source は技術プレビュー中です。技術プレビュー中の機能は、将来のリリースで変更または削除される可能性があります。Elastic は問題を修正するために取り組みますが、技術プレビュー中の機能は公式 GA 機能のサポート SLA の対象ではありません。

version フィールドは、合成 _source をサポートしますが、copy_to を宣言しない限りです。

合成ソースは常に version フィールドをソートし、重複を削除します。例えば:

Python

  1. resp = client.indices.create(
  2. index="idx",
  3. mappings={
  4. "_source": {
  5. "mode": "synthetic"
  6. },
  7. "properties": {
  8. "versions": {
  9. "type": "version"
  10. }
  11. }
  12. },
  13. )
  14. print(resp)
  15. resp1 = client.index(
  16. index="idx",
  17. id="1",
  18. document={
  19. "versions": [
  20. "8.0.0-beta1",
  21. "8.5.0",
  22. "0.90.12",
  23. "2.6.1",
  24. "1.3.4",
  25. "1.3.4"
  26. ]
  27. },
  28. )
  29. print(resp1)

Ruby

  1. response = client.indices.create(
  2. index: 'idx',
  3. body: {
  4. mappings: {
  5. _source: {
  6. mode: 'synthetic'
  7. },
  8. properties: {
  9. versions: {
  10. type: 'version'
  11. }
  12. }
  13. }
  14. }
  15. )
  16. puts response
  17. response = client.index(
  18. index: 'idx',
  19. id: 1,
  20. body: {
  21. versions: [
  22. '8.0.0-beta1',
  23. '8.5.0',
  24. '0.90.12',
  25. '2.6.1',
  26. '1.3.4',
  27. '1.3.4'
  28. ]
  29. }
  30. )
  31. puts response

Js

  1. const response = await client.indices.create({
  2. index: "idx",
  3. mappings: {
  4. _source: {
  5. mode: "synthetic",
  6. },
  7. properties: {
  8. versions: {
  9. type: "version",
  10. },
  11. },
  12. },
  13. });
  14. console.log(response);
  15. const response1 = await client.index({
  16. index: "idx",
  17. id: 1,
  18. document: {
  19. versions: ["8.0.0-beta1", "8.5.0", "0.90.12", "2.6.1", "1.3.4", "1.3.4"],
  20. },
  21. });
  22. console.log(response1);

コンソール

  1. PUT idx
  2. {
  3. "mappings": {
  4. "_source": { "mode": "synthetic" },
  5. "properties": {
  6. "versions": { "type": "version" }
  7. }
  8. }
  9. }
  10. PUT idx/_doc/1
  11. {
  12. "versions": ["8.0.0-beta1", "8.5.0", "0.90.12", "2.6.1", "1.3.4", "1.3.4"]
  13. }

次のようになります:

コンソール-結果

  1. {
  2. "versions": ["0.90.12", "1.3.4", "2.6.1", "8.0.0-beta1", "8.5.0"]
  3. }