面试题答案
一键面试设计思路
- 评分字段:由于评分范围是0 - 5分且支持小数点后一位,为了精确存储且不浪费过多空间,可使用
float
类型。float
类型在Elasticsearch中可以满足精度需求,并且在排序和过滤时性能较好。 - 销量字段:销量是整数,根据实际业务中销量可能达到的最大值,选择合适的整数类型。如果预计销量不会超过2147483647(2^31 - 1),可使用
integer
类型;若可能超过这个值,可使用long
类型,以确保能够存储所有可能的销量数据,同时在排序和过滤操作中保持高效。
相关配置
假设使用Elasticsearch的mapping来定义索引结构,示例如下:
{
"mappings": {
"properties": {
"rating": {
"type": "float"
},
"sales_volume": {
"type": "integer" // 如果预计销量很大,可改为 "type": "long"
}
}
}
}
在查询时,为了进一步优化性能,可对这两个字段添加合适的索引策略。例如,对于排序操作频繁的字段,可以考虑设置index_options
参数来优化排序性能。但在一般情况下,默认的index_options
设置(对于float
和整数类型默认配置能满足常见需求)就能满足高效查询。同时,可根据实际查询模式,如经常进行范围查询等,对字段进行适当的fielddata
等配置优化,但需要注意fielddata
可能占用较多内存,需谨慎使用。