如果只使用exists筛选器,将使用哪种elasticsearch字符串数据类型?

0tdrvxhp  于 2021-06-10  发布在  ElasticSearch
关注(0)|答案(1)|浏览(378)

我正在使用ElasticSearch6.8版。我想存储一个标识符(由字母、数字和可能的空格组成的字符串)。我将在该字段上使用的唯一筛选器是 exists 过滤器(我将检查是否设置了值)。使用 keyword 类型或a text 类型?对于 text 我可能可以设置的类型

"norms": false,
  "index_options": "freqs"

以减小索引大小。
文件指出,由于这是“结构化”文本,最好的选择是使用 keyword 类型,但由于可能值的数量很大(这是一个id),恐怕这会占用大量磁盘空间。
我有一个包含数百万条记录的索引,所以我想保持这个字段的磁盘使用率较低。关于磁盘空间,哪个选项是最好的,对性能有什么影响?

g6baxovj

g6baxovj1#

因为您不想搜索此字段的值或对其运行聚合,所以应该将此字段存储为 keyworddoc_values 已禁用。

"fieldName": { 
    "type":       "keyword",
    "doc_values": false
}

禁用 doc_values 将为您节省磁盘空间。
字段Map为 text 没有 doc_values 启用并可以使用较少的空间,但它们会被分析并占用内存空间。
如果您根本不关心字段的值,您甚至可以在接收期间将其更改为简单字符串或单个数字,具体取决于您接收数据的方式。

相关问题