经过两章对Dynamic mapping
与Explict mapping
的讨论,使用mapping时的常用最佳实践有:
在生产环境使用explict mapping
。
将dynamic设置为strict
,可以防止索引中被插入意外的字段
不要将string字段的mapping既设置为text
又设置为keyword
(这也是动态映射的默认行为,所以不建议使用动态映射),绝大部分场景一种就够用了。如果需要全文搜索就用text
类型,如果需要聚合、排序就用keyword类型,
这样可以减少倒排索引的磁盘空间占用
将coercion(强制类型转换)
关掉。永远使用正确的数据类型,保持严谨
选择正确的numeric data types
(数值类型)。对于整数使用integer
数据类型(动态映射默认使用long
),虽然long可以存储大整数,但会占用更多磁盘空间;对于小数绝大多数场景使用float
足矣,虽然double
可以存储更高精度的数据,但会多占用两倍的磁盘空间。
对于有海量文档的索引——如果不需要做排序、聚合,将doc_values
设置为false;如果不需要relavance score
,将norms
设置为false
;如果不需要对字段进行搜索,将index
设置为false
。 参考: https://es.kpingfan.com/04.mapping-and-analysis-ii/01.mapping-parameters/#doc_values 对于文档数量不多的索引,没必要过度工程做上面这些优化。
人永远能考虑周全,业务场景随时在变,必要时直接上reindex
解千愁