正如The Definitive Guide -> Indexing Employee Documents所说
关系数据库⇒数据库⇒表⇒行⇒列
Elasticsearch⇒指数⇒类型⇒文档⇒字段
The Definitive Guide -> Index Aliases and Zero Downtime说
做好准备:在应用程序中使用别名而不是索引。然后,您可以随时重新索引。别名很便宜,应该大量使用。
问题是,如果Indices
与Databases
一样,那么如果我想重建一个Type
(Table
),我必须重新索引整个Database
那是合理的吗? (这是one index multi types
)。
或者我必须为项目创建许多索引,并且每个索引只有一种类型,这听起来像一个项目有几十个数据库!
答案 0 :(得分:1)
我想我理解你的困惑。假设您有一个名为 my_index 的索引和三个类型 type1 , type2 和 type3 。您为此索引创建了alias
alias1 。
现在您想要更改 type1 的映射,因此您需要重新索引 type1 的每个文档,但是您希望使用零停机时间所以你创建一个新索引 index2 并重新索引 type1 的文档,现在如果你想让 alias1 引用新索引,就会出现问题,正如你所说,只有你想要zero downtime
时才必须重新索引所有其他类型。如果您对停机时间没问题,那么显然您可以删除所有文档并重新编制索引。
要解决上述问题,您应事先为here所述的相同索引创建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
在类型级别上获得支持,那会更容易,有人打开了issue,但由于我的复杂性而关闭它。
希望这会有所帮助!!
答案 1 :(得分:0)
您可以使用一种索引和多种类型。
您可以在索引中重新索引给定类型的文档,而不会影响同一索引中但属于其他类型的其他文档。事实上,索引中的每个文档都可以重新编制索引,而无需重新索引其他文档。