我正在使用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/

10-09 20:09
查看更多