Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17] ›Mapping ›Типы данных полей

Тип поля версии

Тип поля version — это специализация типа поля keyword для обработки значений версий программного обеспечения и поддержки специализированных правил приоритета для них. Приоритет определяется в соответствии с правилами, изложенными в Semantic Versioning, что, например, означает, что основные, второстепенные и дополняющие части версии сортируются по возрастанию (например, "2.1.0" < "2.4.1" < "2.11.2"), а предварительные версии сортируются перед окончательными (например, "1.0.0-alpha" < "1.0.0").

Вы индексируете поле version следующим образом:

resp = client.indices.create(
    index="my-index-000001",
    mappings={
        "properties": {
            "my_version": {
                "type": "version"
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    mappings: {
      properties: {
        my_version: {
          type: 'version'
        }
      }
    }
  }
)
puts response
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"
      }
    }
  }
}

Это поле предоставляет те же возможности поиска, что и обычное поле keyword. Его можно, например, искать по точным совпадениям с помощью запросов match или term, а также поддерживает поиск по префиксу и по маске. Основное преимущество заключается в том, что запросы range будут учитывать порядок Semver, поэтому запрос range между "1.0.0" и "1.5.0" будет включать версии "1.2.3", но не "1.11.2", например. Обратите внимание, что это будет отличаться при использовании обычного поля keyword для индексирования, где порядок определяется по алфавиту.

Ожидается, что версии программного обеспечения будут соответствовать схеме и правилам приоритета правилам Semantic Versioning с одним заметным исключением: допускается больше или меньше трех основных идентификаторов версии (например, "1.2" или "1.2.3.4" являются допустимыми версиями, в то время как по строгим правилам Semver не являются). Строки версий, которые не являются допустимыми в соответствии с определением Semver (например, "1.2.alpha.4"), все равно могут быть проиндексированы и получены как точные совпадения, однако они все будут отображаться после любой допустимой версии с обычным алфавитным порядком. Пустая строка "" считается недопустимой и сортируется после всех допустимых версий, но перед другими недопустимыми.

Параметры для полей версии

Следующие параметры принимаются полями типа version:

meta

Метаданные о поле.

Ограничения

Этот тип поля не оптимизирован для сложных поисков с подстановками, регулярными выражениями или fuzzy-поиском. Хотя такие типы запросов работают в этом поле, при сильной зависимости от этих типов запросов следует рассмотреть использование обычного поля keyword.

Синтетическое _source

Синтетическое _source доступно только для индексов TSDB (индексы, в которых index.mode установлено в time_series). Для других индексов синтетическое _source находится на стадии технического предварительного просмотра. Функции на стадии технического предварительного просмотра могут быть изменены или удалены в будущих выпусках. Elastic будет работать над устранением любых проблем, но функции на стадии технического предварительного просмотра не подпадают под SLA поддержки официальных функций GA.

Поля version поддерживают синтетический _source в их конфигурации по умолчанию.

Синтетический _source может сортировать значения поля version и удалять дубликаты. Например:

resp = client.indices.create(
    index="idx",
    settings={
        "index": {
            "mapping": {
                "source": {
                    "mode": "synthetic"
                }
            }
        }
    },
    mappings={
        "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)
const response = await client.indices.create({
  index: "idx",
  settings: {
    index: {
      mapping: {
        source: {
          mode: "synthetic",
        },
      },
    },
  },
  mappings: {
    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
{
  "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"]
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/version.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API