工作纪实56-ES搜索串一致性

最近接收到了一个需求,一个用户有一组搜索串,比如字符串: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值