繁体   English   中英

Elasticsearch中的索引别名和通配符索引端点是完全相同的吗?

[英]Are index aliases and wildcard index endpoints in Elasticsearch exactly the same thing?

索引别名的Elasticsearch文档说:

索引别名API允许使用名称对索引进行别名,所有API都自动将别名转换为实际索引名称。 别名也可以映射到多个索引,并且在指定别名时,别名将自动扩展为别名索引。

多指数的文档说:

大多数引用index参数的API都支持跨多个索引执行,使用简单的test1,test2,test3表示法(或_all表示所有索引)。 它还支持通配符,例如: 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

我的问题

所有这些方法是否都在“引擎盖下”做同样的事情,还是有可能期望比其他方法更好的性能?

我问,因为我读过通配符查询是一个常见的性能瓶颈,但我从未见过在索引端点中使用别名或通配符的任何类似警告 - 或者区分默认别名(如_all )和自定义别名。

从代码执行的角度来看,它们并不完全相同 但它们功能相同,并且具有相同的性能配置文件。

别名实际上只是附加到现有索引的“标签”。 因此,当您搜索2014别名时,Elasticsearch只扫描群集状态中的索引列表,并查找使用该别名标记的所有索引。

当您搜索通配符索引模式时,它会扫描索引列表以查看哪些名称与正则表达式匹配。

因此,性能基本上是相同的,因为实际搜索完全不受影响:无论如何都将查询与这些搜索相关联的分片,并且所有索引到分片查找将很快在协调节点上发生,无论使用的方法。

所以不用担心,你可以选择对你更有意义的:)

PS。 不鼓励使用通配符查询,因为它们确实具有性能影响。 他们必须生成并检查大量潜在令牌,这可能对延迟产生不可忽视的影响。 但它们与索引通配符或ES周围的许多其他通配符非常不同。 在ES中支持模式匹配/通配符的大多数东西都只是Java正则表达式,而wildcard查询是Lucene内部反对倒排索引的花哨自动机魔术......非常不同:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM