智能拨号的搜索排序需求
搜索类型的排序:联系人姓名匹配 > 联系人号码匹配 > 服务号姓名匹配 > 服务号号码匹配 联系人、
联系人,服务号码的号码搜索匹配介绍:
1.对于匹配到的号码,如果他们的号码长度一样且匹配的数字位置也一样,则按照联系人或者服务号的姓名来进行排序,
如林正( 18559037475)排在黄金勇(18678239172)的前面
2.匹配到的数字越靠前(左边),则号码的排序也越靠前,如18559037475排在13818342134的前面
解决方案梳理
1 排序问题直接修改Comparator的匹配规则就可以
2 目前有的可匹配项有 mSearchByType : 匹配类型 mMatchStartIndex : 匹配的起始下标 mMatchLength : 匹配的长度 mMatchKeywords : 匹配到的内容
3 匹配规则是
0 联系人姓名匹配 > 联系人号码匹配 > 服务号姓名匹配 > 服务号号码匹配
1 全拼的排序顺序是:数字名 > 中文名 > 英文名(通过matchKeyWords来判断) (服务号的匹配是V6平台原来逻辑,不需要更改)
1.1 如果一个姓名匹配,一个号码匹配则姓名匹配在前(根据searchType判断)
1.2 如果都是姓名匹配或者号码匹配则执行2中逻辑 2 全拼>首字母全拼>混拼搜索
2.1 如果都是号码匹配,查看匹配长度肯定一样,直接查看匹配起始下标(根据matchStartIndex判断)
2.2 如果都是号码匹配,并且匹配长度一样,匹配起始下标越小越考前;
2.3 如果都是号码匹配,并且匹配长度一样,并且匹配起始下标一样,返回0, 按照原来顺序(即名字字母先后顺序) ################ 暂时将全拼和混合全拼都当作一种匹配形式:全拼
2.4 如果都是名字匹配,查看是否全拼(mMatchKeywords 和name 是否equal)
2.5 如果都是名字匹配,并且都是全拼,返回0,按照原来顺序(即名字字母先后顺序)(一人多个号码)
2.6 如果都是名字匹配,查看是否混合全拼(matchLength是否和name的length一样 )
2.7 如果都是名字匹配,并且都是混合全拼,返回0, 按照原来顺序(即名字字母先后顺序) ################ 暂时将全拼和混合全拼都当作一种匹配形式:全拼
2.8 最后就是混拼了,匹配个数最多在前,最先匹配的在前,还无法分辨返回0(即名字字母先后顺序)
网友评论