В Elasticsearch псевдоним - это вторичное имя, присвоенное группе потоков данных или индексов. Псевдонимы могут создаваться и удаляться динамически с помощью REST-точки _aliases.
Псевдоним не может быть использован в процессе индексирования, если он указывает на более чем один индекс. В случае попытки Elasticsearch выдаст исключение.
Удаление псевдонима не приводит к удалению фактического индекса.
Существует два типа псевдонимов:
- Псевдонимы потоков данных: Псевдоним для потока данных относится к одному или нескольким потокам данных. Имена потоков данных будут обозначаться псевдонимами потоков данных. В кластерном состоянии псевдонимы потоков данных хранятся отдельно от потоков данных.
- Псевдонимы индексов: Псевдоним индекса указывает на один или несколько индексов.
Ведущий узел (мастер) управляет состоянием кластера, которое включает псевдонимы.
Создание и удаление псевдонимов
Создание псевдонима на одном индексе:
1 2 3 4 5 6 7 8 9 10 11 | POST /_aliases?pretty { "actions": [ { "add": { "index": "index_1", "alias": "alias_1" } } ] } |
Создание псевдонима, привязанного более чем к одному индексу:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | POST /_aliases?pretty { "actions": [ { "add": { "index": "index_1", "alias": "alias_1" } }, { "add": { "index": "index_2", "alias": "alias_1" } } ] } |
Вывод списка всех доступных псевдонимов в кластере Elasticsearch:
1 | GET _cat/aliases |
Удаление псевдонима:
1 2 3 4 5 6 7 8 9 10 11 | POST /_aliases?pretty { "actions": [ { "remove": { "index": "index_2", "alias": "alias_1" } } ] } |
Варианты использования псевдонимов
Псевдонимы используются для различных целей, например, для поиска по нескольким индексам с одним именем, выполнения процесса переиндексации с минимальным временем простоя и запроса данных на основе предопределенных фильтров. Ниже приведены 6 различных вариантов использования псевдонимов.
Псевдонимы на основе фильтров для ограничения доступа к данным
Одним из вариантов использования является создание псевдонимов на основе фильтров, что весьма полезно при необходимости ограничения доступа к данным. При выполнении запроса псевдоним может автоматически применять фильтр.
Например, рассмотрим индекс с именем "example-idx", имеющий псевдоним, указывающий на группы, содержащие компанию "example". Вы можете создать псевдоним, который будет автоматически выполнять эту фильтрацию, как показано в следующих шагах.
Документы индекса:
1 2 3 4 5 | PUT /example-idx/_doc/1 { "title": "Taking Care of Your Entire Search Operation", "company": "Example" } |
1 2 3 4 5 | PUT /example-idx/_doc/2 { "title": "Streaming service", "company": "XYZ" } |
Добавьте запрос к действиям в параметре "filte"`, чтобы создать псевдоним фильтра. Запрос здесь используется для ограничения документов, к которым псевдоним может получить доступ.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | POST /_aliases?pretty { "actions": [ { "add": { "index": "example-idx", "alias": "example-alias", "filter": { "term": { "company": "Example" } } } } ] } |
При выполнении запроса match-all по "example-alias" в результатах поиска появятся только те документы, которые соответствуют термину запроса (который был добавлен при построении фильтра алиаса, т.е. документы с названием компании, равным "example").
Поисковый запрос:
1 2 3 4 5 6 | GET test-alias/_search { "query":{ "match_all":{} } } |
Ответ на поиск:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 1.0, "hits": [ { "_index": "example-idx", "_id": "1", "_score": 1.0, "_source": { "title": "Taking Care of Your Entire Search Operation", "company": "Example" } } ] } |
Теперь, если вы попытаетесь запросить документы, содержащие название компании "XYZ", следующим образом:
1 2 3 4 5 6 7 8 | GET test-alias/_search { "query": { "match": { "company": "XYZ" } } } |
Поисковый ответ будет таким:
1 2 3 4 5 6 7 8 | "hits": { "total": { "value": 0, "relation": "eq" }, "max_score": null, "hits": [] } |
Комбинирование маршрутизации с псевдонимами
В следующем примере при поиске и индексировании отфильтровывается компания "example" и добавляется "1" к маршруту, чтобы ограничить место поиска.
Маршрутизация - это строковое значение, которое используется для направления операций индексирования и поиска на определенный шард.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | POST /_aliases?pretty { "actions": [ { "add": { "index": "index_1", "alias": "alias_2", "filter": { "term": { "company": "example" } }, "routing": "1" } } ] } |
Переход к новым индексам
Псевдонимы можно использовать в тех случаях, когда требуется плавный переход от старого индекса к новому без простоев.
Создание скользящих окон в отдельных индексах
Например, при построении ежедневных индексов для данных можно создать псевдоним с именем "last-7-days" для создания скользящего окна данных за предыдущие семь дней. Тогда каждый день, создавая новый суточный индекс, можно добавлять его в псевдоним и одновременно удалять индекс 8-дневной давности.
Псевдонимы и ILM для обновления или удаления документов
Вы можете использовать псевдоним индекса и шаблон индекса с ILM для управления и переноса индексов псевдонима, если Вам необходимо часто обновлять или удалять существующие документы в многочисленных индексах.
Запрос данных из замороженного индекса
При использовании ILM, если вам все же необходимо запросить данные из замороженного индекса, вы можете использовать для этого псевдоним. Вместо того чтобы искать данные непосредственно в индексе, можно выполнить поисковый запрос по псевдониму, что увеличит производительность и позволит получить ответ с меньшими затратами ресурсов.