2017-02-10 8 views
0

私はelasticsearchドキュメントを読み、見出し「何がタイプである」下Index vs. Typeで書かれた興味深い行を、発見された第二の点は、こう述べています。一つのタイプには存在しインデックス内のElasticSearchタイプのメモリ割り当てはどのように行われますか?

フィールズもの種類の文書のためのリソースを消費しますこのフィールドは存在しません。

実際には何を意味するのか分かりません。それは、私は2つのタイプを作成する場合は、TIが言う意味しています:

Type 1: [a:string, b:text, c:keyword] Type 2: [c: keyword, d:string] 

その後、私はタイプ2の文書を格納していた場合でも、ElasticSearchは、すべての5つのフィールドのためのスペースを取るのだろうか?私はそれが事実であるとは思わないが、文書に書かれているのと同じように見える。

答えて

0

Elasticsearchは、Luceneの上に構築されています。Luceneは、「タイプ」の概念を持ちません。 Luceneでは、索引があり、それを文書で埋めるだけです。タイプは、Elasticsearchレイヤーにのみ存在する抽象です。

あなたはタイプ1のために文書を書くときに、それはLuceneの中でこの文書を書くようなものです:

{ "A": "foo" という、 "B": "バー"、 は "C" "FOOBAR"、 "D":NULL }

又はその後2入力に書き込む:

{ "A":ヌル、 "B":ヌル、 "C": " Foobar "、 " d ":" Foobaz z " }

あるタイプのドキュメントを作成しているときに、他のタイプのフィールドを空白のままにしているにもかかわらず、これらの空のフィールドは引き続きLuceneのリソースを消費する可能性があります。たとえば、normsとdoc_valuesは空のフィールドでも計算されます(有効になっていると仮定すると、デフォルトでフィールドのタイプによって異なります)。

また読む価値がある:https://www.elastic.co/blog/great-mapping-refactoring

関連する問題