gpt4 book ai didi

apache-spark - Elasticsearch有效的索引管理

转载 作者:行者123 更新时间:2023-12-03 00:19:42 25 4
gpt4 key购买 nike

我以一种非典型的方式使用Elasticsearch,并希望对此有多有效。

我创建了整套“文档”,每个文档都有多个字段。我在Spark中将其作为Map [String,Any]的RDD进行。然后,我经常用潜在的新数据覆盖索引。我怀疑更典型的方法是一次更新或添加文档。我通过以下方式使用Elasticsearch Spark Scala支持进行此操作:

val docsRDD: RDD[Map[String, Any]] = getDocs()
docsRDD.saveToEs(esIndexURI, Map("es.mapping.id" -> "id"))

我已经在两个工作流程中做到了这一点,并想知道它们之间的取舍
  • 删除索引,创建编写,然后刷新以使索引可用。这是因为据我所知,直到刷新后才真正删除索引,这将像旧索引的新热交换一样。换句话说,Elasticsearch在后台工作,然后在刷新时交换新的新鲜索引。
  • 使用Spark代码覆盖索引到位,而无需删除/创建/刷新。

  • 起初我是在适当的位置更新文档,但事实证明这是不切实际的,Spark支持似乎建议使用一次编写方法。两者似乎都可行,但是我现在只有一个很小的数据集,不知道不同的方法(或其他建议)如何影响:
  • 操作
  • 期间的查询性能
  • 重新索引的速度
  • 索引的一致性。 #2是否在创建具有部分更新的索引,以便查询针对不完整的更新? #1是否导致索引在一段时间内不可用?
  • 最佳答案

    第三种选择:首先给当前索引分配一个别名,然后通过该别名而不是直接给索引进行地址搜索。在更新/重建索引时,请使用最新数据编写一个全新的索引,请勿覆盖或删除/重建当前索引。建立新索引后,请为其分配别名并将其从旧索引中删除。将别名分配给更新的索引后,请删除/存档/使用旧索引。根据需要重复进行后续索引重建。

    完全满足您的需求,在构建新索引时不会干扰当前索引版本的读取,并且不依赖计时/运气来保持已删除索引的可随时搜索。当然,它确实需要为两个版本的索引提供足够的存储空间。

    关于apache-spark - Elasticsearch有效的索引管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32106538/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com