美文网首页
关于搜索的一个问题

关于搜索的一个问题

作者: 0o冻僵的企鹅o0 | 来源:发表于2017-11-23 17:14 被阅读35次

在项目中做搜索会碰到这样一个问题:你输入字母e,会模糊搜索出很多结果,比如“enter”,“empty”等,里面包含字母e,我们很容易就可以实现高亮字母e,但是结果中如果有中文,比如“这”,“者”,他们的拼音也包含字母e,那么怎么做到高亮结果呢?

方法如下(比如输入了搜索字符searchText : e, 其中一个结果是:“到这里来”):

  1. 首先将搜索字符searchText转拼音(因为输入的可能是中文,这里统一将结果转为大写的拼音字母来判断,不单独判断),
  2. 将查询的结果进行遍历,取出查询结果的每个字符,取出“到”;
  3. 将“到”转为拼音“DAO”,判断“DAO”是否包含搜索字符searchText,如果包含,那么“到”高亮,否则不用高亮;或者搜索字符包含了“DAO”,也高亮,否则不高亮(这里看是否有这个需求)
    3.将所有判断的结果都依次组装到一个可变富文本字符串retStr中;

代码如下:

/**
 @param orgText 搜索得到的结果
 @param searchText 搜索输入的问题本
 @param font 字体大小
 @param orgColor 默认字体颜色
 @param highColor 高亮字体颜色
 @return 可变字符串
 */
- (NSAttributedString *)generalSearchHighColorTextWithText:(NSString *)orgText
                                                searchText:(NSString *)searchText
                                                      font:(UIFont *)font
                                              orgTextColor:(UIColor *)orgColor
                                                 highColor:(UIColor *)highColor
{
    NSMutableAttributedString *retStr = [[NSMutableAttributedString alloc] init];
    NSString *nameItem = nil;
    NSString *nameItemPinYi = nil;
    NSAttributedString *nameItemAStr = nil;
    
    UIColor *retColor = nil;
   NSString *searchT = [searchText fullSpellPinYinName];//fullSpellPinYinName 为中文转拼音的分类方法
    for (NSInteger i = 0; i < orgText.length; ++i)
    {
        nameItem = [orgText substringWithRange:NSMakeRange(i, 1)];
        nameItemPinYi = [nameItem fullSpellPinYinName];
        if (nameItemPinYi.length > 0)
        {
            if (nameItemPinYi.length >= searchT.length)
            {
                if ([nameItemPinYi containsString:searchT])
                {
                    retColor = highColor;
                }
                else
                {
                    retColor = orgColor;
                }
            }
            else
            {
                if ([searchT containsString:nameItemPinYi]){
                    retColor = highColor;
                }
                else
                {
                    retColor = orgColor;
                }
            }
        }
        else
        {
            retColor = orgColor;
        }
        //genaralAttributeStringWith 是用文字,字体,颜色生成富文本的分类方法
        nameItemAStr = [UILabel genaralAttributeStringWith:nameItem font:font color:retColor];
        [retStr appendAttributedString:nameItemAStr];
    }
    
    return retStr;
}

总的来说,这里就是讨论中文结果的拼音中含有输入的字符串,该如何高亮这个中文文本。

相关文章

  • 关于搜索的一个问题

    在项目中做搜索会碰到这样一个问题:你输入字母e,会模糊搜索出很多结果,比如“enter”,“empty”等,里面包...

  • 2018-10-15

    今天我去知乎搜索了关于自尊心的问题。

  • 贝叶斯优化详解

    关于参数搜索 参数搜索是一个开放的问题,假设我们拥有一个函数,该函数的性质完全由参数决定,那么,我们就可以通过对参...

  • 纯手写 关于去除搜索记录重复值的问题

    最近写了一个搜索界面 关于去除搜索记录重复值的问题当时没有想到怎么去掉重复值,最后发现如果重复了让他直接retur...

  • elasticsearch filter查询与bitset

    关于Filter 从solr到es,一路下来对搜索引擎的长期使用,工作内容也包含大量的搜索优化的问题,无论是搜索质...

  • 搜索问题

    问题抽象① 从N个数中选择x个数,使其满足一定的条件。这个在搜索算法中非常有用。(用递归完成) 例如:输入N个数,...

  • 兴趣越早培养越好

    [爱心]一直在关注一个公众号叫生涯研习社,经常分享一些关于职场上的问题,当你搜索关键词兴趣的时候会显示149条搜索...

  • #关于搜索、列表页展示问题的思考#

    为什么详情页对、列表页不对: 虽然是同取的批次数据,但列表页的展示结果是由搜索引擎过滤、数据实时变更会触发重新计算...

  • 练字计划的调整20221123

    在昨天大致定好练字的方向目标之后,今天在抖音上搜索一些关于行书的内容,发现很多人都在搜索一个问题,想要学行书需不需...

  • 关于搜索

    最近主动接了搜索的需求。所以开始关注搜索。其中有2本书:1.电商产品经理宝典2.这就是搜索引擎核心技术详解 搜索的...

网友评论

      本文标题:关于搜索的一个问题

      本文链接:https://www.haomeiwen.com/subject/ugnzvxtx.html