如何在索引中为ElasticSearch类型完成内存分配?

时间:2017-02-10 11:07:25

标签: elasticsearch lucene

我正在阅读Type 1: [a:string, b:text, c:keyword] Type 2: [c: keyword, d:string] 文档,并在Index vs. Type的标题为“什么是类型”的标题下写了一条有趣的文字,第二点说:

  

一种类型中存在的字段也会消耗此字段不存在的类型的文档的资源。

我无法理解它的实际含义。这是否意味着如果我创建两种类型:

java.lang.unsupportedclassversionerror akka/actor/Actor: unsupported major.minor version 52.0

那么即使我存储了类型为2的文档,ElasticSearch也会占用所有5个字段的空间?我不认为应该是这种情况,但看起来是相同的,就像在文档中写的一样。

1 个答案:

答案 0 :(得分:0)

Elasticsearch建立在Lucene之上,它没有" type"的概念。使用Lucene,您只需要一个索引,然后用文档填充它。类型是仅存在于Elasticsearch层的抽象。

因此,当您为类型1编写文档时,就像在Lucene中编写此文档一样:

{   " a":" Foo",   " b":" Bar",   " c":" Foobar",   " d":null }

或写入类型2然后:

{   " a":null,   " b":null,   " c":" Foobar",   " d":" Foobazz" }

尽管当您为一种类型编写文档时,您将其他类型的字段留空,但这些空字段仍然会占用Lucene中的资源。例如,仍然在空字段上计算规范和doc_values(假设它们已启用,默认情况下它们取决于字段类型)。

另外值得一读:https://www.elastic.co/blog/great-mapping-refactoring