Index Aliases的Elasticsearch文档说:
索引别名API允许使用名称为所有索引别名 API自动将别名转换为实际索引名称。 别名也可以映射到多个索引,以及何时 指定它,别名将自动扩展为别名 指数。
Multiple Indices的文档说:
大多数引用
index
参数的API都支持执行 多个索引,使用简单的test1,test2,test3
表示法(或_all
表示 所有指数)。它还支持通配符,例如:test*
和 能够"添加" (+
)和"删除" (-
),例如:+test*,-test3
。
情景#1
您有2014年的12个月度指数,每个指数都以日期模式命名,例如: someprefix_2014-07
您将所有这些索引映射到名为2014
的别名。
这两个请求都会返回相同的结果:
$ curl -XGET http://localhost:9200/someprefix_2014-*/_stats
$ curl -XGET http://localhost:9200/2014/_stats
情景#2
您的群集中总共有24个月度索引,您决定要将所有索引作为目标。
所有这些请求都会返回相同的结果:
$ 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
我的问题
所有这些方法都做同样的事情"在引擎盖下#34;或者是否有一个可能期望比其他方法更好的性能?
我问,因为我已经读过Wildcard Queries是一个常见的性能瓶颈,但我从未见过在索引端点中使用别名或通配符的任何类似警告 - 或区分默认别名(如_all
)来自自定义的。
答案 0 :(得分:6)
从代码执行的角度来看,它们完全完全相同。但它们在功能上是相同的,并且具有相同的性能配置文件。
别名实际上只是附加到现有索引的“标签”。因此,当您搜索2014
别名时,Elasticsearch只扫描群集状态中的索引列表,并查找使用该别名标记的所有索引。
当您搜索通配符索引模式时,它会扫描索引列表以查看哪些名称与正则表达式匹配。
因此,性能基本上是相同的,因为实际搜索完全不受影响:无论如何都将查询与这些搜索相关联的分片,并且所有索引到分片查找将很快在协调节点上进行,无论使用何种方法。
所以不用担心,你可以选择对你更有意义的东西:)
PS。不鼓励使用通配符查询,因为它们做会影响性能。他们必须生成并检查大量潜在令牌,这可能对延迟产生不可忽视的影响。但它们与索引通配符或ES周围的许多其他通配符非常不同。在ES中支持模式匹配/通配符的大多数东西都只是Java正则表达式,而wildcard
查询是Lucene内部反对倒排索引的花哨自动机魔法......大不相同:)