面试题答案
一键面试- 实现思路:
- 使用
script_fields
在搜索结果中创建一个新的字段来展示调整后的工资。 - 在脚本中,通过
doc['入职时间字段名'].value
获取员工入职时间,与当前时间比较判断是否超过5年。这里假设当前时间获取可以通过System.currentTimeMillis()
,并将5年转换为毫秒数(5 * 365 * 24 * 60 * 60 * 1000)进行比较。 - 根据判断结果对
doc['基本工资字段名'].value
进行相应的百分比调整(超过5年增加20%,未超过5年增加10%)。
- 使用
- 完整的查询DSL:
{
"query": {
"match_all": {}
},
"script_fields": {
"调整后工资": {
"script": {
"lang": "painless",
"source": "def currentTime = System.currentTimeMillis(); def fiveYearsInMillis = 5 * 365 * 24 * 60 * 60 * 1000; if (currentTime - doc['入职时间字段名'].value.getMillis() > fiveYearsInMillis) { return doc['基本工资字段名'].value * 1.2; } else { return doc['基本工资字段名'].value * 1.1; }"
}
}
}
}
请将上述DSL中的入职时间字段名
和基本工资字段名
替换为实际在ElasticSearch索引中对应的字段名。