首先 來展示下效果
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 搞定 (其實我也只是抱着試一試的心態 沒想到真的可以)