首页 文章

Elasticsearch高效的索引管理

提问于
浏览
1

我正在以非典型的方式使用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"))

我已经在两个工作流程中完成了这项工作,并希望了解它们的权衡

  • Delete index, create it, write it,然后 refresh 以获取索引 . 这是因为据我所知,在刷新之前,索引并没有真正被删除,这将做旧的新索引的热交换 . 换句话说,Elasticsearch在后台工作,然后在刷新时交换新的新索引 .

  • Overwrite 索引到位,Spark代码没有删除/创建/刷新 .

起初我正在更新文档,但事实证明这是不切实际的,Spark的支持似乎暗示了一次性写作方法 . 两者似乎都有效,但我现在有一个小数据集,并想知道不同方法(或其他建议)如何影响:

  • 在操作期间查询性能

  • reindex的速度

  • 索引的连贯性 . #2是否创建了具有部分更新的索引,因此查询将针对不完整的更新?是#1导致索引在一段时间内不可用吗?

1 回答

  • 0

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

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

相关问题