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

Тип поля псевдонима

alias отображение определяет альтернативное имя для поля в индексе. Псевдоним может быть использован вместо целевого поля в запросах поиска и в некоторых других API, таких как возможности полей.

resp = client.indices.create(
    index="trips",
    mappings={
        "properties": {
            "distance": {
                "type": "long"
            },
            "route_length_miles": {
                "type": "alias",
                "path": "distance"
            },
            "transit_mode": {
                "type": "keyword"
            }
        }
    },
)
print(resp)

resp1 = client.search(
    query={
        "range": {
            "route_length_miles": {
                "gte": 39
            }
        }
    },
)
print(resp1)
response = client.indices.create(
  index: 'trips',
  body: {
    mappings: {
      properties: {
        distance: {
          type: 'long'
        },
        route_length_miles: {
          type: 'alias',
          path: 'distance'
        },
        transit_mode: {
          type: 'keyword'
        }
      }
    }
  }
)
puts response

response = client.search(
  body: {
    query: {
      range: {
        route_length_miles: {
          gte: 39
        }
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "trips",
  mappings: {
    properties: {
      distance: {
        type: "long",
      },
      route_length_miles: {
        type: "alias",
        path: "distance",
      },
      transit_mode: {
        type: "keyword",
      },
    },
  },
});
console.log(response);

const response1 = await client.search({
  query: {
    range: {
      route_length_miles: {
        gte: 39,
      },
    },
  },
});
console.log(response1);
PUT trips
{
  "mappings": {
    "properties": {
      "distance": {
        "type": "long"
      },
      "route_length_miles": {
        "type": "alias",
        "path": "distance" 
      },
      "transit_mode": {
        "type": "keyword"
      }
    }
  }
}

GET _search
{
  "query": {
    "range" : {
      "route_length_miles" : {
        "gte" : 39
      }
    }
  }
}

Путь к целевому полю. Обратите внимание, что это должен быть полный путь, включая любые родительские объекты (например, object1.object2.field).

Практически все компоненты запроса поиска поддерживают псевдонимы полей. В частности, псевдонимы могут использоваться в запросах, агрегациях, сортировке полей, а также при запросе docvalue_fields, stored_fields, предложений и выделений. Скрипты также поддерживают псевдонимы при доступе к значениям полей. См. раздел о неподдерживаемых API для исключений.

В некоторых частях запроса поиска и при запросе возможностей полей могут быть предоставлены шаблоны с подстановкой полей. В этих случаях шаблон с подстановкой будет соответствовать псевдонимам полей наряду с конкретными полями:

resp = client.field_caps(
    index="trips",
    fields="route_*,transit_mode",
)
print(resp)
response = client.field_caps(
  index: 'trips',
  fields: 'route_*,transit_mode'
)
puts response
const response = await client.fieldCaps({
  index: "trips",
  fields: "route_*,transit_mode",
});
console.log(response);
GET trips/_field_caps?fields=route_*,transit_mode

Целевые псевдонимы

Существуют некоторые ограничения на целевой объект псевдонима:

  • Цель должна быть конкретным полем, а не объектом или другим псевдонимом поля.
  • Целевое поле должно существовать во время создания псевдонима.
  • Если определены вложенные объекты, псевдоним поля должен иметь тот же уровень вложенности, что и его целевое поле.

Кроме того, псевдоним поля может иметь только одну цель. Это означает, что нельзя использовать псевдоним поля для запроса по нескольким целевым полям в одном условии.

Псевдоним может быть изменён на новую цель посредством обновления отображения. Известное ограничение заключается в том, что если какие-либо сохранённые запросы percolator содержат псевдоним поля, они всё ещё будут ссылаться на его исходную цель. Более подробную информацию можно найти в документации по полю percolator.

Неподдерживаемые API

Записи в псевдонимы полей не поддерживаются: попытка использовать псевдоним в запросе индексации или обновления приведёт к ошибке. Аналогичным образом, псевдонимы не могут быть целью copy_to или в многопольных структурах.

Поскольку имена псевдонимов отсутствуют в исходном документе, псевдонимы не могут использоваться при выполнении фильтрации исходных данных. Например, следующий запрос вернёт пустой результат для _source:

resp = client.search(
    query={
        "match_all": {}
    },
    source="route_length_miles",
)
print(resp)
response = client.search(
  body: {
    query: {
      match_all: {}
    },
    _source: 'route_length_miles'
  }
)
puts response
const response = await client.search({
  query: {
    match_all: {},
  },
  _source: "route_length_miles",
});
console.log(response);
GET /_search
{
  "query" : {
    "match_all": {}
  },
  "_source": "route_length_miles"
}

В настоящее время только API поиска и возможностей полей будут принимать и разрешать псевдонимы полей. Другие API, которые принимают имена полей, такие как API терм-векторов, не могут использоваться с псевдонимами полей.

Наконец, некоторые запросы, такие как terms, geo_shape и more_like_this, позволяют извлекать информацию о запросе из индексированного документа. Поскольку псевдонимы полей не поддерживаются при извлечении документов, часть запроса, определяющая путь поиска, не может ссылаться на поле по его псевдониму.

© 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/field-alias.html

Spec-Zone.ru

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