2015-04-01 55 views
3

Index Aliases的Elasticsearch文件说:Elasticsearch中的索引别名和通配符索引端点是否完全相同?

该指数的别名API允许使用一个名称别名索引,所有 API的别名自动转换为实际的指标名称。 别名也可以映射到多个索引,并且当指定它时,别名将自动扩展到别名 索引。

而对于Multiple Indices的文件说:

引用跨 多个指标的 index参数支持执行,使用简单 test1,test2,test3符号(或 _all为 所有指数)

大多数API。它还支持通配符,例如:test*和 “添加”(+)和“删除”(-)的能力,例如:+test*,-test3

方案1

  1. 你必须从2014年每一个日期模式命名,如12个月的指数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。通配符查询不鼓励,因为它们有性能影响。他们必须生成并检查大量的潜在令牌,这可能会对等待时间产生不可忽视的影响。但它们与ES中的索引通配符或许多其他通配符非常不同。大多数支持ES中的模式匹配/通配符的东西只是Java正则表达式,而wildcard查询是Lucene中对付倒排索引的奇特自动机魔法......差别很大:)

+0

非常感谢您的洞察力!另外,这正是我想听到的:-) – 2015-04-02 03:39:38

+0

这些是最好的答案! :) – Zach 2015-04-02 12:29:45