2015-04-01 2 views
3

документация Elasticsearch для Index Aliases говорит:Являются ли индексы псевдонимами и конечными точками индексов в Elasticsearch точно так же?

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

И документация Multiple Indices говорит:

Большинство API-интерфейсы, относящиеся к исполнению index параметра поддержки через нескольких индексов, используя простые test1,test2,test3 обозначения (или _all для всех индексов). Он также поддерживает подстановочные знаки, например: test* и способность «добавить» (+) и «удалить» (-), например: +test*,-test3.

Сценарий № 1

  1. У вас есть 12 месячных индексов с 2014 года каждый из которых назван с шаблоном даты, например, someprefix_2014-07

  2. Вы сопоставляете все эти индексы с псевдонимом с именем 2014.

  3. Оба эти запросы будут возвращать тот же результат:

    • $ curl -XGET http://localhost:9200/someprefix_2014-*/_stats

    • $ curl -XGET http://localhost:9200/2014/_stats

Сценарий # 2

  1. В вашем кластере имеется 24 ежемесячных индекса, и вы решите, что хотите нацелить их на всех.

  2. Все эти запросы будут возвращать тот же результат:

    • $ curl -XGET http://localhost:9200/_stats

    • $ curl -XGET http://localhost:9200/_all/_stats

    • $ curl -XGET http://localhost:9200/*/_stats

    • $ curl -XGET http://localhost:9200/someprefix_*/_stats

Мой вопрос

ли все эти методы делают то же самое «под капотом», или есть один, который можно ожидать более высокую производительность, чем другие?

Я спрашиваю, потому что я читал Wildcard Queries быть общим узким местом в производительности, но я никогда не видел какое-либо подобное предупреждения для использования псевдонимов или групповых символов в индексных конечных точках - или различая псевдонимы по умолчанию (например, _all) из пользовательских единиц.

ответ

5

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

Псевдонимы - это действительно «теги», которые привязаны к существующим индексам. Поэтому, когда вы просматриваете псевдоним 2014, Elasticsearch просто просматривает список индексов в состоянии кластера и находит все индексы, помеченные этим псевдонимом.

При поиске по шаблону индекса подстановочного знака он просматривает список индексов, чтобы увидеть, какие имена соответствуют регулярному выражению.

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

Так что не волнуйтесь, вы можете выбрать в зависимости от того имеет больше смысла для вас :)

PS. Подстановочные запросы не приветствуются, потому что они do имеют последствия для производительности. Они должны генерировать и проверять большое количество потенциальных токенов, которые могут иметь незначительное влияние на латентность. Но они сильно отличаются от подстановочных знаков индекса или многих других подстановочных знаков вокруг ES. Большинство вещей, которые поддерживают сопоставление шаблонов/подстановочные знаки в ES, являются просто регулярным выражением Java, тогда как запрос wildcard - это волшебная магия автомата внутри Lucene от инвертированных индексов ... очень разные :)

+0

Большое спасибо за понимание! Плюс именно то, что я хотел услышать :-) –

+0

Это лучшие ответы! :) – Zach

Смежные вопросы