Elasticsearch:多索引一种类型或一种索引多种类型

时间:2016-01-16 02:23:47

标签: elasticsearch

正如The Definitive Guide -> Indexing Employee Documents所说

  

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

     

Elasticsearch⇒指数⇒类型⇒文档⇒字段

The Definitive Guide -> Index Aliases and Zero Downtime

  

做好准备:在应用程序中使用别名而不是索引。然后,您可以随时重新索引。别名很便宜,应该大量使用。

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

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

2 个答案:

答案 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)

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

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