elasticsearch,Performance,Rest,Indexing,elasticsearch" /> elasticsearch,Performance,Rest,Indexing,elasticsearch" />

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

Performance Elasticsearch中的索引别名和通配符索引端点是否完全相同?,performance,rest,indexing,elasticsearch,Performance,Rest,Indexing,elasticsearch,Elasticsearch的文档说明: 索引别名API允许使用名称对索引进行别名,包括所有 API自动将别名转换为实际索引名。 别名也可以映射到多个索引,并且 指定它后,别名将自动扩展到别名 指数 其文档说明: 大多数引用索引参数的API都支持跨 多个索引,使用简单的test1、test2、test3符号(或\u all表示 所有指数)。它还支持通配符,例如:test*,以及 能够“添加”(++)和“删除”(-),例如:+test*,-test3 情景#1 您有12个2014年的月度指数,每个指

Elasticsearch的文档说明:

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

其文档说明:

大多数引用
索引
参数的API都支持跨
多个索引,使用简单的
test1、test2、test3
符号(或
\u all
表示 所有指数)。它还支持通配符,例如:
test*
,以及 能够“添加”(
++
)和“删除”(
-
),例如:
+test*,-test3

情景#1

  • 您有12个2014年的月度指数,每个指数都以日期模式命名,例如
    someprefix_2014-07

  • 将所有这些索引映射到名为
    2014
    的别名

  • 这两个请求将返回相同的结果:

    • $curl-XGEThttp://localhost:9200/someprefix_2014-*/_统计数据

    • $curl-XGEThttp://localhost:9200/2014/_stats

  • 场景#2

  • 您的集群中总共有24个月度指数,您决定将所有指数都作为目标

  • 所有这些请求都将返回相同的结果:

    • $curl-XGEThttp://localhost:9200/_stats

    • $curl-XGEThttp://localhost:9200/_all/_stats

    • $curl-XGEThttp://localhost:9200/*/_统计数据

    • $curl-XGEThttp://localhost:9200/someprefix_*/_统计数据

  • 我的问题

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

    我问这个问题是因为我读过关于常见性能瓶颈的文章,但我从未见过任何类似的警告,比如在索引端点中使用别名或通配符,或者区分默认别名(如
    \u all
    )和自定义别名。

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

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

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

    因此,性能基本相同,因为实际搜索完全不受影响:与这些搜索相关联的碎片将被查询,而所有碎片索引查找都将在协调节点上快速进行,无论使用何种方法

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


    另外,不鼓励使用通配符查询,因为它们确实会影响性能。他们必须生成和检查大量潜在的令牌,这可能对延迟产生不可忽略的影响。但是,它们与索引通配符或ES周围的许多其他通配符非常不同。在ES中支持模式匹配/通配符的大多数东西只是Java正则表达式,而
    通配符
    查询是Lucene内部针对反向索引的奇妙的自动机魔法…非常不同:)

    非常感谢您的洞察力!另外,这正是我想听到的:-)这些是最好的答案