我正在以非典型的方式使用Elasticsearch,并希望了解这是多么有效。
我创建了一整套“docs”,每个都有几个字段。我在Spark中将其作为Map [String,Any]的RDD。然后我经常使用潜在的新数据覆盖索引。我怀疑更典型的方法是一次更新或添加文档。我使用Elasticsearch Spark Scala支持执行此操作:
val docsRDD: RDD[Map[String, Any]] = getDocs()
docsRDD.saveToEs(esIndexURI, Map("es.mapping.id" -> "id"))
我已经在两个工作流程中完成了这项工作,并希望了解他们的权衡
起初我正在更新文档,但事实证明这是不切实际的,Spark的支持似乎暗示了一次性写作方法。两者似乎都有效,但我现在有一个小数据集,并想知道不同方法(或其他建议)如何影响:
答案 0 :(得分:0)
第三种选择:首先为当前索引分配别名,并通过该别名进行地址搜索,而不是直接搜索索引。更新/重建索引时,使用最新数据编写全新索引,不要覆盖或删除/重建当前数据。构建新索引后,为其分配别名并将其从旧索引中删除。将别名分配给更新的索引后,删除/存档/无论旧索引。根据需要重复后续索引重建。
完全符合您的需求,不会干扰当前索引版本的读取,而新的索引版本正在构建并且不依赖于计时/运气来保持删除的索引暂时可搜索。当然,它确实需要为索引的两个版本提供足够的存储空间。