我正在使用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
,可以使用较少的空间,但是已对其进行分析,并且可能占用内存空间。如果您根本不关心字段的值,则甚至可以在提取期间将其更改为简单的字符串或单个数字,具体取决于您提取数据的方式。
关于elasticsearch - 如果仅存在过滤器,则使用哪种Elasticsearch字符串数据类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64645196/