正如权威指南->索引员工文档所说
关系数据库⇒数据库⇒表⇒行⇒列
Elasticsearch ⇒索引 ⇒ 类型⇒文档⇒字段
权威指南 ->索引别名和零停机时间说
做好准备:在应用程序中使用别名而不是索引。然后,您将能够在需要时重新编制索引。别名很便宜,应该自由使用。
问题是,如果Indices
就像Databases
一样,那么如果我想重建一个Type
(Table
),我必须重新索引整个Database
,这合理吗?(这是one index multi types
)。
或者我必须为一个项目创建许多索引,每个索引只有一个类型,这听起来就像一个项目有几十个数据库!
我想我理解你的困惑。假设您有一个名为 my_index 的索引和三种类型类型为 type1、type 2 和 type3。为此索引创建 alias
别名 1。
type1 的每个文档,但您希望在零停机时间的情况下执行此操作,因此您创建一个新的索引 index2 并重新索引 type1 的文档,现在如果您希望 alias1 引用新索引,问题将出现,正如您所说,只有在您想要zero downtime
时才必须重新索引所有其他类型。如果您对停机时间感到满意,那么显然您可以删除所有文档并重新索引它们。
要解决上述问题,您应该事先为同一索引创建multiple aliases
,如此处所述,查找名为"使用别名以获得更大的灵活性"部分。您像这样为当前索引创建 3 个aliases
curl - XPOST localhost:9200/_aliases - d ' {
"actions": [{
"add": {
"alias": "type1_alias",
"index": "index1"
}
}, {
"add": {
"alias": "type2_alias",
"index": "index1"
}
},
{
"add": {
"alias": "type3_alias",
"index": "index1"
}
}]
}
'
现在,您将 type1 文档索引为type1_alias依此类推。现在,每当你想要重建任何特定类型时,你都可以创建新索引并为该新索引分配特定类型别名。您还必须从旧索引中删除该特定类型的文档(在本例中为 index1)
如果alias
在类型级别上得到支持,这会容易得多,有人对此提出了一个问题,但由于我猜它的复杂性而被关闭了。
希望这有帮助!!
可以使用一个索引和多个类型。
可以在索引中为给定类型的文档重新编制索引,而不会影响同一索引中但属于其他类型的其他文档。事实上,索引中的每个文档都可以重新编制索引,而不必重新索引其他文档。