2017-03-11 92 views
0

在Elasticsearch映射的所有字段中都有一個stored屬性,該屬性確定該字段的數據是否將存儲在磁盤上(除了存儲整個_source之外)。Elasticsearch默認存儲或不存儲字段值?

默認爲false

然而,每個分片中的每個分段在映射中也具有每個字段的Docvalues結構。結構存儲段中所有文檔的字段值。

默認情況下,所有文檔和字段都包含在結構中。

所以一方面,默認情況下Elasticsearch不存儲字段的值。另一方面,它確實將值存儲在Docvalues結構中。

那它是哪一個? Elasticsearch默認存儲或不存儲值?

回答

0

ES爲了不同的目的以多種格式存儲相同的字段。

例如,試想一下:

"prop_1":{ "type":"string", "index":"not_analyzed","store":true,"doc_values":true} 

prop_1將被存儲在自己作爲indexeddoc_valuesstored領域。最重要的是,prop_1與其他字段一起存儲到 _source字段中。

如上所述,即使​​,字段數據仍然以多種格式保存在磁盤上。

存儲字段是爲最佳存儲而設計的,而文檔值是 可快速設計存取字段值。在執行 查詢期間,很多doc值字段被訪問以獲取候選匹配,因此訪問必須很快。這就是爲什麼您應該在排序,聚合和腳本中使用文檔值 的原因。另一方面,存儲的字段應該用於頂級匹配文檔的返回字段值。現在

,您可以使用doc_values響應返回領域以及: -

GET /_search 
{ 
    "query" : { 
     "match_all": {} 
    }, 
    "docvalue_fields" : ["test1", "test2"] 
} 

文件值的字段可以在沒有存儲領域的工作。所以海事組織,儲存的領域現在沒有任何意義。

+0

嘿,謝謝你的回答。我想了解什麼物理數據結構存儲的字段(不是文檔值)被保存,以及如果/爲什麼此結構提供了比doc值結構更快的單個值。謝謝 –

+0

你可以參考:http://blog.jpountz.net/post/33247161884/efficient-compressed-stored-fields-with-lucene – Rahul