elasticsearch elasticsearch:如果索引的所有碎片中都存在文档,则更新文档,elasticsearch,lucene,search-engine,elasticsearch,Lucene,Search Engine" /> elasticsearch elasticsearch:如果索引的所有碎片中都存在文档,则更新文档,elasticsearch,lucene,search-engine,elasticsearch,Lucene,Search Engine" />

elasticsearch elasticsearch:如果索引的所有碎片中都存在文档,则更新文档

elasticsearch elasticsearch:如果索引的所有碎片中都存在文档,则更新文档,elasticsearch,lucene,search-engine,elasticsearch,Lucene,Search Engine,我在谷歌上搜索了所有索引碎片(如果存在)中的更新文档。我找到了一种方法(/_bulkapi),但它需要我们指定路由值。我没能找到解决我问题的办法。如果有人知道下面的事情,请告诉我 如果存在索引的所有碎片,是否有任何方法使用单个更新查询更新文档 如果没有,是否有任何方法生成路由值,以便我们能够使用更新查询命中所有碎片 对于批量更新,ES建议通过查询获取需要使用扫描和滚动更新的文档,更新文档并再次对其编制索引。在内部,ES从不更新文档,尽管它通过脚本提供了更新API。它总是使用更新的字段/值重新索引

我在谷歌上搜索了所有索引碎片(如果存在)中的更新文档。我找到了一种方法(/_bulkapi),但它需要我们指定路由值。我没能找到解决我问题的办法。如果有人知道下面的事情,请告诉我

  • 如果存在索引的所有碎片,是否有任何方法使用单个更新查询更新文档

  • 如果没有,是否有任何方法生成路由值,以便我们能够使用更新查询命中所有碎片


  • 对于批量更新,ES建议通过查询获取需要使用扫描和滚动更新的文档,更新文档并再次对其编制索引。在内部,ES从不更新文档,尽管它通过脚本提供了更新API。它总是使用更新的字段/值重新索引新文档,并删除旧文档

    Is there any way to update the doc in all the shards of an index if exists using a single update query?.
    
    你可以检查它是否适合你的目的。还有一些插件可以通过查询为您提供更新

    现在是路由部分和更新所有碎片。如果第一次为文档编制索引时指定了路由值,则无论何时更新文档,都需要设置原始路由值。否则ES将永远不知道文档驻留的是哪个碎片,它可以将其发送到任何碎片(基于algo)


    如果您不使用路由值,那么ES将根据文档的ID使用一个algo来决定它需要去的碎片。因此,当您通过批量API更新文档并保持相同的ID而无需路由时,文档将保存在与以前相同的碎片中,您将看到更新。

    对于批量更新,ES建议通过查询获取需要使用扫描和滚动更新的文档,更新文档并重新编制索引。在内部,ES从不更新文档,尽管它通过脚本提供了更新API。它总是使用更新的字段/值重新索引新文档,并删除旧文档

    Is there any way to update the doc in all the shards of an index if exists using a single update query?.
    
    你可以检查它是否适合你的目的。还有一些插件可以通过查询为您提供更新

    现在是路由部分和更新所有碎片。如果第一次为文档编制索引时指定了路由值,则无论何时更新文档,都需要设置原始路由值。否则ES将永远不知道文档驻留的是哪个碎片,它可以将其发送到任何碎片(基于algo)


    如果您不使用路由值,那么ES将根据文档的ID使用一个algo来决定它需要去的碎片。因此,当您通过批量API更新文档并在没有路由的情况下保持相同的ID时,文档将保存在与以前相同的碎片中,您将看到更新。

    Piyusgoyal:我的要求是在任何碎片中使用相同的ID更新文档,因为插入时我的路由值不同。场景是一个文档在多个用户之间共享,在插入过程中路由值为userid,docid为id。在2.0No中,您始终可以将以前的路由值作为元数据的一部分。我的要求不同。让10万用户共享1个文档,我的索引有5个碎片。理想情况下,我需要准备5个更新查询,而不是10万个更新查询,因为文档id保持不变,但每个用户的路由都会发生变化。10万用户共享同一文档是什么意思?他们访问同一个文档?他们有权更新同一个文档?piyushGoyal:我的要求是在任何一个碎片中更新具有相同id的文档,因为插入时我的路由值不同。场景是一个文档在多个用户之间共享,在插入过程中路由值为userid,docid为id。在2.0No中,您始终可以将以前的路由值作为元数据的一部分。我的要求不同。让10万用户共享1个文档,我的索引有5个碎片。理想情况下,我需要准备5个更新查询,而不是10万个更新查询,因为文档id保持不变,但每个用户的路由都会发生变化。10万用户共享同一文档是什么意思?他们访问同一个文档?他们有权更新同一文档吗?