使用别名时使用索引字段提高搜索查询的性能

improving performance of search query using index field when working with alias

我在使用 Bulk Api 写入数据时使用别名。 我有 2 个问题:

我可以在使用别名写入数据后获取索引名称作为响应的一部分吗? 如果我发送针对特定索引的搜索查询而不是搜索同一别名的所有索引,是否可以提高性能?

您可以在搜索数据时提供多个索引名称,如果您使用 alias 并且默认情况下它有多个索引,它将搜索所有索引,但如果您想根据以下条件进行过滤alias 中的一些索引,这也可能基于基础索引中的字段。

您可以阅读 Filter-based 别名以限制对数据的访问 部分在 this 博客中了解如何实现它,因为它查询更少的索引和数据越少,搜索性能越好。

此外 alias 只能有一个可写索引,您也可以在 _cat/alias?v api 响应中获得它的名称,这表明哪个是 write_index为别名,可以看到示例输出here

如果您使用别名进行写入,则该别名只能指向您将在批量响应中收到的单个索引

例如,如果 test_aliastest 索引的别名,那么在发送此批量命令时:

POST test_alias/_doc/_bulk
{"index":{}}
{"foo": "bar"}

您将收到此回复:

{
  "index" : {
    "_index" : "test",               <---- here is the real index name
    "_type" : "_doc",
    "_id" : "WtcviYABdf6lG9Jldg0d",
    "_version" : 1,
    "result" : "created",
    "_shards" : {
      "total" : 2,
      "successful" : 2,
      "failed" : 0
    },
    "_seq_no" : 0,
    "_primary_term" : 1,
    "status" : 201
  }
}

根据常识,在单个索引上搜索总是比在跨多个索引的别名上搜索更快,但如果别名仅跨单个索引,则没有区别。