我正在阅读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个字段的空间?我不认为应该是这种情况,但看起来是相同的,就像在文档中写的一样。
答案 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