创建Mapping时的最佳实践

经过两章对Dynamic mappingExplict mapping的讨论,使用mapping时的常用最佳实践有:

  1. 在生产环境使用explict mapping

  2. 将dynamic设置为strict,可以防止索引中被插入意外的字段

  3. 不要将string字段的mapping既设置为text又设置为keyword(这也是动态映射的默认行为,所以不建议使用动态映射),绝大部分场景一种就够用了。如果需要全文搜索就用text类型,如果需要聚合、排序就用keyword类型,这样可以减少倒排索引的磁盘空间占用

  4. coercion(强制类型转换)关掉。永远使用正确的数据类型,保持严谨

  5. 选择正确的numeric data types(数值类型)。对于整数使用integer数据类型(动态映射默认使用long),虽然long可以存储大整数,但会占用更多磁盘空间;对于小数绝大多数场景使用float足矣,虽然double可以存储更高精度的数据,但会多占用两倍的磁盘空间。

  6. 对于有海量文档的索引——如果不需要做排序、聚合,将doc_values设置为false;如果不需要relavance score,将norms设置为false;如果不需要对字段进行搜索,将index设置为false。 参考: https://es.kpingfan.com/04.mapping-and-analysis-ii/01.mapping-parameters/#doc_values 对于文档数量不多的索引,没必要过度工程做上面这些优化。

  7. 人永远能考虑周全,业务场景随时在变,必要时直接上reindex解千愁