最近接收到了一个需求,一个用户有一组搜索串,比如字符串:abcdefg,如果新增的数据是abdcdfge,则视为是同一条数据,可以理解为即使顺序不同,但是实际上也是唯一串;
为什么是一个数据串我解释一下:大部分的公司es搜索功能(中台),都是会做二次开发的,到实际业务部门,需要根据他们二次开发的规则,提供一个查询数据串
思路
- 对即将生成的唯一串数据,要先处理成有序字段【treeMap】
- 生成的唯一串结果最好是定长(不定长的字符串->定长的字符串:hash算法)
- 运算效率(暂时不考虑,一般都很快)
有点数字签名的意思,只不过这个地方不需要公司秘钥
代码
我选择的是sha-256哈希加密,安全性还可以,生成的效率够用
如果不考虑安全性的话,md5效率要更好一点;
public static String genUniqueKey(String uid, String queryCond) {
String[] paramsArray = queryCond.split("&");
Map<String, String> paramsMap = new TreeMap<>();
for (String param : paramsArray) {
String[] keyValue = param.split("=");
paramsMap.put(keyValue[0], keyValue[1]);
}
// 将参数按照键名排序
StringBuilder sortedParams = new StringBuilder(uid).append("&");
for (Map.Entry