弹性搜索:多索引一种类型或一索引多种类型



正如权威指南->索引员工文档所说

关系数据库⇒数据库⇒表⇒行⇒列

Elasticsearch ⇒索引 ⇒ 类型⇒文档⇒字段

权威指南 ->索引别名和零停机时间说

做好准备:在应用程序中使用别名而不是索引。然后,您将能够在需要时重新编制索引。别名很便宜,应该自由使用。

问题是,如果Indices就像Databases一样,那么如果我想重建一个TypeTable),我必须重新索引整个Database,这合理吗?(这是one index multi types)。

或者我必须为一个项目创建许多索引,每个索引只有一个类型,这听起来就像一个项目有几十个数据库!

我想我理解你的困惑。假设您有一个名为 my_index 的索引和三种类型类型为 type1type 2type3。为此索引创建 alias 别名 1

现在您想更改 type1 的映射,因此您需要重新索引

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在类型级别上得到支持,这会容易得多,有人对此提出了一个问题,但由于我猜它的复杂性而被关闭了。

希望这有帮助!!

可以使用一个索引和多个类型。

可以在索引中为给定类型的文档重新编制索引,而不会影响同一索引中但属于其他类型的其他文档。事实上,索引中的每个文档都可以重新编制索引,而不必重新索引其他文档。

最新更新