问题描述
我正在使用Elasticsearch 6.8版。我想存储一个标识符(一个包含字母,数字和可能的空格的字符串)。我将在该字段上使用的唯一过滤器将是exists
过滤器(我将检查该值是否已设置)。使用keyword
类型或text
类型的最佳选择是什么?对于text
类型,我可以设置
"norms": false,"index_options": "freqs"
减小索引大小。
文档指出,由于这是“结构化”文本,所以最好的选择是使用keyword
类型,但是由于可能的值数量很大(它是一个ID),因此担心这会占用大量磁盘空间。
我有一个包含数百万条记录的索引,因此我想将此字段的磁盘使用率保持在较低水平。关于磁盘空间,哪个选项最合适?对性能有何影响?
解决方法
由于您不想搜索此字段的值或对其进行汇总,因此应在禁用keyword
的情况下将此字段存储为doc_values
。
"fieldName": {
"type": "keyword","doc_values": false
}
禁用doc_values
将节省磁盘空间。
映射为text
的字段没有启用doc_values
,可以使用更少的空间,但是会对其进行分析并占用内存空间。
如果您根本不关心该字段的值,则甚至可以在提取期间将其更改为简单字符串或单个数字,具体取决于您提取数据的方式。