Elasticsearch:自动跨两个索引递增整数字段

ar0*_*968 1 elasticsearch

我需要跨两个索引的自动递增整数字段。

Elasticsearch可以像表中的MySQL“自动增量”字段一样自动执行吗?

例如。将某些文档放在两个不同的索引中时:

POST /my_index_1/blogpost/
{
  "title": "Foo Bar"
}

POST /my_index_2/blogpost/
{
  "title": "Baz quux"
}
Run Code Online (Sandbox Code Playgroud)

在检索它时,我想要:

GET /my_index_*/blogpost/
{
  "uid" : 1,
  "title": "Foo Bar"
},
{
  "uid" : 2,
  "title": "Baz quux"
}
Run Code Online (Sandbox Code Playgroud)

Jil*_*urp 5

不可以,ES不具有任何自动递增功能,因为它是分布式系统,因此计算出正确的计数器值并非易事。尤其是因为(批量)索引趋向于大量并发。如果向其扔足够的文档,通常可以使所有节点上的CPU最大化。

因此,最好的选择是在将文档发送到ES之前在ES之外执行此操作。甚至更好,不要这样做。如果您需要某种插入顺序,则更好的选择是简单地使用时间戳。它们实际上在内部存储为数字。如果两个文档的索引相同,当然您仍然可能会得到重复。我们惯用的解决方法是将同时索引的文档偏移1 ms。以确保我们保留广告订单。