zoukankan      html  css  js  c++  java
  • elasticSearch+ik_smart 支持 符号检索

    首先 来展示下效果

     1% 在一起 是因为我在自定义词库里面定义了,如果不修改ik_smart源码 是连百分号 都看不到的,对了 我使用的是 elasticsearch-analysis-ik-7.3.2

    第一步 下载elasticsearch-analysis-ik-7.3.2源码 找到 CharacterUtil.java这个类

    将  identifyCharType 方法从这样

    static int identifyCharType(char input){
            if(input >= '0' && input <= '9'){
                return CHAR_ARABIC;
                
            }else if((input >= 'a' && input <= 'z')
                    || (input >= 'A' && input <= 'Z')){
                return CHAR_ENGLISH;
                
            }else {
                Character.UnicodeBlock ub = Character.UnicodeBlock.of(input);
                
                if(ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS  
                        || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS  
                        || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A){
                    //目前已知的中文字符UTF-8集合
                    return CHAR_CHINESE;
                    
                }else if(ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS //全角数字字符和日韩字符
                        //韩文字符集
                        || ub == Character.UnicodeBlock.HANGUL_SYLLABLES 
                        || ub == Character.UnicodeBlock.HANGUL_JAMO
                        || ub == Character.UnicodeBlock.HANGUL_COMPATIBILITY_JAMO
                        //日文字符集
                        || ub == Character.UnicodeBlock.HIRAGANA //平假名
                        || ub == Character.UnicodeBlock.KATAKANA //片假名
                        || ub == Character.UnicodeBlock.KATAKANA_PHONETIC_EXTENSIONS){
                    return CHAR_OTHER_CJK;
                    
                }
            }
            //其他的不做处理的字符
            return CHAR_USELESS;
        }

    修改为 这样 对 就是多加个 else if语句块

    static int identifyCharType(char input){
            if(input >= '0' && input <= '9'){
                return CHAR_ARABIC;
                
            }else if((input >= 'a' && input <= 'z')
                    || (input >= 'A' && input <= 'Z')){
                return CHAR_ENGLISH;
                
            }else {
                Character.UnicodeBlock ub = Character.UnicodeBlock.of(input);
                
                if(ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS  
                        || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS  
                        || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A){
                    //目前已知的中文字符UTF-8集合
                    return CHAR_CHINESE;
                    
                }else if(ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS //全角数字字符和日韩字符
                        //韩文字符集
                        || ub == Character.UnicodeBlock.HANGUL_SYLLABLES
                        || ub == Character.UnicodeBlock.HANGUL_JAMO
                        || ub == Character.UnicodeBlock.HANGUL_COMPATIBILITY_JAMO
                        //日文字符集
                        || ub == Character.UnicodeBlock.HIRAGANA //平假名
                        || ub == Character.UnicodeBlock.KATAKANA //片假名
                        || ub == Character.UnicodeBlock.KATAKANA_PHONETIC_EXTENSIONS){
                    return CHAR_OTHER_CJK;
                    
                } else if (ub == Character.UnicodeBlock.GREEK // 希腊符号
                        // 希腊扩展符号
                        || ub == Character.UnicodeBlock.GREEK_EXTENDED
                        // 拉丁字符
                        || ub == Character.UnicodeBlock.BASIC_LATIN
                        // 拉丁补充字符
                        || ub == Character.UnicodeBlock.LATIN_1_SUPPLEMENT
                        // 拉丁扩展A字符
                        || ub == Character.UnicodeBlock.LATIN_EXTENDED_A
                        // 拉丁扩展B字符
                        || ub == Character.UnicodeBlock.LATIN_EXTENDED_B) {
                    return CHAR_CHINESE;
                }
            }
            //其他的不做处理的字符
            return CHAR_USELESS;
        }

    然后 高能预警

    使用javac 将我们修改后的 CharacterUtil 类编译成.class文件

    然后直接替换进本来的之前使用的jar包(可能没描述清楚,截个图)

     然后

     然后 重启elasticSearch 搞定 (其实我也只是抱着试一试的心态 没想到真的可以)

  • 相关阅读:
    WEB安全第二篇--用文件搞定服务器:任意文件上传、文件包含与任意目录文件遍历
    WEB安全第一篇--对服务器的致命一击:代码与命令注入
    python的内存管理与垃圾回收机制学习
    java反序列化漏洞的检测
    python epoll实现异步socket
    Python class的属性访问控制和内建函数重写实现高级功能以及@property
    weblogic新漏洞学习cve-2017-10271
    PHP后门的eval类和system类 函数到底有哪些区别
    JS 转整型
    .NET MVC model数据验证
  • 原文地址:https://www.cnblogs.com/guanxiaohe/p/12922742.html
Copyright © 2011-2022 走看看