如果仅使用存在过滤器,则使用哪种 Elasticsearch 字符串数据类型?
Which Elasticsearch string datatype to use if only exists filter is used?
我使用的是 Elasticsearch 6.8 版。我想存储一个标识符(一个由字母、数字和可能的 whitespace 组合而成的字符串)。我将在该字段上使用的唯一过滤器是 exists
过滤器(我将检查该值是否已设置)。这里最好的选择是什么,使用 keyword
类型还是 text
类型?对于 text
类型我大概可以设置
"norms": false,
"index_options": "freqs"
减少索引大小。
文档指出,由于这是“结构化”文本,最好的选择是使用 keyword
类型,但由于可能值的数量很大(它是一个 ID),我恐怕这会占用大量磁盘 space.
我有一个包含数百万条记录的索引,因此我想保持该字段的磁盘使用率较低。哪个选项最适合磁盘 space,对性能有何影响?
由于您不想搜索此字段的值或它们的 运行 聚合,您应该将此字段存储为 keyword
并禁用 doc_values
。
"fieldName": {
"type": "keyword",
"doc_values": false
}
禁用 doc_values
将为您节省磁盘 space。
映射为 text
的字段未启用 doc_values
并且可以使用更少的 space,但它们已被分析并且可以在内存中占用 space。
如果您根本不关心字段的值,您甚至可以在摄取期间将其更改为简单的字符串或单个数字,具体取决于您摄取数据的方式。
我使用的是 Elasticsearch 6.8 版。我想存储一个标识符(一个由字母、数字和可能的 whitespace 组合而成的字符串)。我将在该字段上使用的唯一过滤器是 exists
过滤器(我将检查该值是否已设置)。这里最好的选择是什么,使用 keyword
类型还是 text
类型?对于 text
类型我大概可以设置
"norms": false,
"index_options": "freqs"
减少索引大小。
文档指出,由于这是“结构化”文本,最好的选择是使用 keyword
类型,但由于可能值的数量很大(它是一个 ID),我恐怕这会占用大量磁盘 space.
我有一个包含数百万条记录的索引,因此我想保持该字段的磁盘使用率较低。哪个选项最适合磁盘 space,对性能有何影响?
由于您不想搜索此字段的值或它们的 运行 聚合,您应该将此字段存储为 keyword
并禁用 doc_values
。
"fieldName": {
"type": "keyword",
"doc_values": false
}
禁用 doc_values
将为您节省磁盘 space。
映射为 text
的字段未启用 doc_values
并且可以使用更少的 space,但它们已被分析并且可以在内存中占用 space。
如果您根本不关心字段的值,您甚至可以在摄取期间将其更改为简单的字符串或单个数字,具体取决于您摄取数据的方式。