ES7學習筆記(七)IK中文分詞器

在上一節(jié)中挪丢,我們給大家介紹了ES的分析器,我相信大家對ES的全文搜索已經(jīng)有了深刻的印象卢厂。分析器包含3個部分:字符過濾器乾蓬、分詞器、分詞過濾器慎恒。在上一節(jié)的例子任内,大家發(fā)現(xiàn)了,都是英文的例子巧号,是吧族奢?因為ES是外國人寫的嘛姥闭,中國如果要在這方面趕上來丹鸿,還是需要屏幕前的小伙伴們的~

英文呢,我們可以按照空格將一句話棚品、一篇文章進行分詞靠欢,然后對分詞進行過濾廊敌,最后留下有意義的詞。但是中文怎么分呢门怪?中文的一句話是沒有空格的骡澈,這就要有一個強大的中文詞庫,當你的內(nèi)容中出現(xiàn)這個詞時掷空,就會將這個詞提煉出來肋殴。這里大家也不用重復造輪子,經(jīng)過前輩的努力坦弟,這個中文的分詞器已經(jīng)有了护锤,它就是今天要給大家介紹的IK中文分詞器

IK中文分詞器的安裝

ES默認是沒有IK中文分詞器的酿傍,我們要將IK中文分詞器作為一個插件安裝到ES中烙懦,安裝的步驟也很簡單:

  1. 從GitHub上下載適合自己ES版本的IK中文分詞器,地址如下:https://github.com/medcl/elasticsearch-analysis-ik/releases赤炒。

  2. 在我們的ES的插件目錄中(${ES_HOME}/plugins)創(chuàng)建ik目錄氯析,

    mkdir ik
    
  3. 將我們下載好的IK分詞器解壓到ik目錄,這里我們安裝unzip命令莺褒,進行解壓掩缓。

  4. 重啟我們所有的ES服務。

到這里癣朗,我們的IK中文分詞器就安裝完了。

IK中文分詞器初探

在上一節(jié)我們訪問了ES的分析器接口旷余,指定了分析器和文本的內(nèi)容绢记,我們就可以看到分詞的結果蠢熄。那么既然我們已經(jīng)安裝了Ik中文分詞器,當然要看一下效果了饥追。在看效果之前但绕,我們先要說一下,IK中文分詞器插件給我們提供了兩個分析器捏顺。

  • ik_max_word: 會將文本做最細粒度的拆分
  • ik_smart:會做最粗粒度的拆分

我們先看看ik_max_word的分析效果吧幅骄,

POST _analyze
{
  "analyzer": "ik_max_word",
  "text":     "中華人民共和國國歌"
}

我們指定分詞器為ik_max_word,文本內(nèi)容為中華人民共和國國歌主巍。我們看一下分詞的結果:

{
    "tokens": [
        {
            "token": "中華人民共和國",
            "start_offset": 0,
            "end_offset": 7,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "中華人民",
            "start_offset": 0,
            "end_offset": 4,
            "type": "CN_WORD",
            "position": 1
        },
        {
            "token": "中華",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 2
        },
        {
            "token": "華人",
            "start_offset": 1,
            "end_offset": 3,
            "type": "CN_WORD",
            "position": 3
        },
        {
            "token": "人民共和國",
            "start_offset": 2,
            "end_offset": 7,
            "type": "CN_WORD",
            "position": 4
        },
        {
            "token": "人民",
            "start_offset": 2,
            "end_offset": 4,
            "type": "CN_WORD",
            "position": 5
        },
        {
            "token": "共和國",
            "start_offset": 4,
            "end_offset": 7,
            "type": "CN_WORD",
            "position": 6
        },
        {
            "token": "共和",
            "start_offset": 4,
            "end_offset": 6,
            "type": "CN_WORD",
            "position": 7
        },
        {
            "token": "國",
            "start_offset": 6,
            "end_offset": 7,
            "type": "CN_CHAR",
            "position": 8
        },
        {
            "token": "國歌",
            "start_offset": 7,
            "end_offset": 9,
            "type": "CN_WORD",
            "position": 9
        }
    ]
}

我們可以看到岖赋,分詞分的非常細选脊,我們在使用上面的這些進行搜索時恳啥,都可以搜索到中華人民共和國國歌這個文本钝的。我們再看一下另外一個分析器ik_smart硝桩,

POST _analyze
{
  "analyzer": "ik_smart",
  "text":     "中華人民共和國國歌"
}

我們的文本內(nèi)容同樣是中華人民共和國國歌,看一下分詞的效果衙伶,

{
    "tokens": [
        {
            "token": "中華人民共和國",
            "start_offset": 0,
            "end_offset": 7,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "國歌",
            "start_offset": 7,
            "end_offset": 9,
            "type": "CN_WORD",
            "position": 1
        }
    ]
}

同樣的文本矢劲,使用ik_smart進行分詞時芬沉,只分成了兩個詞,和ik_max_word分詞器比少了很多蹦漠。這就是兩個分詞器的區(qū)別,不過這兩個分析器都是可以對中文進行分詞的隘击。

創(chuàng)建索引時指定IK分詞器

既然我們安裝了IK中文分詞器的插件研铆,那么我們在創(chuàng)建索引時就可以為text類型的字段指定IK中文分詞器了棵红。來看看下面的例子,

PUT ik_index
{
    "mappings": {
        "properties": {
            "id": {
                "type": "long"
            },
            "title": {
                "type": "text",
                "analyzer": "ik_max_word"
            }
        }
    }
}

我們創(chuàng)建了索引ik_index逆甜,并且為字段title指定了分詞器ik_max_word交煞。我們執(zhí)行一下,創(chuàng)建成功素征。然后我們再通過GET請求看一下這個索引的映射情況。

GET ik_index/_mapping

返回的結果如下:

{
    "ik_index": {
        "mappings": {
            "properties": {
                "id": {
                    "type": "long"
                },
                "title": {
                    "type": "text",
                    "analyzer": "ik_max_word"
                }
            }
        }
    }
}

我們可以看到title字段的分析器是ik_max_word根欧。

為索引指定默認IK分詞器

在上一節(jié)中咽块,我們已經(jīng)給大家介紹了為索引指定默認分詞器的方法欺税,這里我們直接把分詞器改為IK分詞器就可以了,如下:

PUT ik_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "default": {
          "type": "ik_max_word"
        }
      }
    }
  }
}

這樣我們在索引中就不用創(chuàng)建每一個字段亭罪,可以通過動態(tài)字段映射应役,將String類型的字段映射為text類型,同時分詞器指定為ik_max_word院崇。我們試一下袍祖,向ik_index索引中添加一條記錄蕉陋。

POST ik_index/_doc/1
{
    "id": 1,
    "title": "大興龐各莊的西瓜",
    "desc": "大興龐各莊的西瓜真是好吃,脆沙瓤茁肠,甜掉牙"
}

執(zhí)行成功缩举。我們再執(zhí)行搜索試一下仅孩,如下:

POST ik_index/_search
{
  "query": { "match": { "title": "西瓜" } }
}

我們搜索title字段匹配西瓜,執(zhí)行結果如下:

{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 0.2876821,
        "hits": [
            {
                "_index": "ik_index",
                "_type": "_doc",
                "_id": "1",
                "_score": 0.2876821,
                "_source": {
                    "id": 1,
                    "title": "大興龐各莊的西瓜",
                    "desc": "大興龐各莊的西瓜真是好吃站刑,脆沙瓤绞旅,甜掉牙"
                }
            }
        ]
    }
}

我們可以看到剛才插入的那條記錄已經(jīng)搜索出來了因悲,看來我們的IK中文分詞器起作用了勺爱,而且搜索的結果也符合我們的預期。我們再看看搜索西一個字的時候卫旱,能不能搜索到結果围段,

POST ik_index/_search
{
  "query": { "match": { "title": "西" } }
}

執(zhí)行結果如下:

{
    "took": 4,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 0,
            "relation": "eq"
        },
        "max_score": null,
        "hits": []
    }
}

并沒有搜索出結果奈泪,說明在進行分詞時,西瓜是作為一個詞出現(xiàn)的拜姿,并沒有拆分成每一個字,這也是符合我們預期的蕊肥。

好了~ 這一節(jié)的IK中文分詞器就給大家介紹到這里了~~

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晴埂,一起剝皮案震驚了整個濱河市寻定,隨后出現(xiàn)的幾起案子狼速,更是在濱河造成了極大的恐慌,老刑警劉巖恼蓬,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拇派,居然都是意外死亡,警方通過查閱死者的電腦和手機疮方,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門骡显,熙熙樓的掌柜王于貴愁眉苦臉地迎上來曾掂,“玉大人惫谤,你說我怎么就攤上這事≈橄矗” “怎么了石挂?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長险污。 經(jīng)常有香客問我痹愚,道長富岳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任拯腮,我火速辦了婚禮窖式,結果婚禮上,老公的妹妹穿的比我還像新娘动壤。我一直安慰自己萝喘,他們只是感情好,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布阁簸。 她就那樣靜靜地躺著醉旦,像睡著了一般檬输。 火紅的嫁衣襯著肌膚如雪丧慈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音筒主,去河邊找鬼建钥。 笑死泽艘,一個胖子當著我的面吹牛天试,可吹牛的內(nèi)容都是我干的喜每。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼涩咖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了咨演?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤横辆,失蹤者是張志新(化名)和其女友劉穎困肩,沒想到半個月后锌畸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體潭枣,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡蚣抗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年锭魔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笙蒙。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡艇搀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情档插,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布耘柱,位于F島的核電站己肮,受9級特大地震影響娄柳,放射性物質發(fā)生泄漏。R本人自食惡果不足惜挎挖,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望航夺。 院中可真熱鬧蕉朵,春花似錦敷存、人聲如沸锚烦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至调卑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厦瓢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工倘要, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留圾亏,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓封拧,卻偏偏與公主長得像志鹃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子泽西,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355