1. 概述

分詞器是Elasticsearch中很重要的一個組件,用來將一段文本分析成一個一個的詞,Elasticsearch再根據這些詞去做倒排索引。

今天我們就來聊聊分詞器的相關知識。

2. 內置分詞器

2.1 概述

Elasticsearch 中內置了一些分詞器,這些分詞器只能對英文進行分詞處理,無法將中文的詞識別出來。

2.2 內置分詞器介紹

standard:標准分詞器,是Elasticsearch中默認的分詞器,可以拆分英文單詞,大寫字母統一轉換成小寫。

simple:按非字母的字符分詞,例如:數字、標點符號、特殊字符等,會去掉非字母的詞,大寫字母統一轉換成小寫。

whitespace:簡單按照空格進行分詞,相當於按照空格split了一下,大寫字母不會轉換成小寫。

stop:會去掉無意義的詞,例如:the、a、an 等,大寫字母統一轉換成小寫。

keyword:不拆分,整個文本當作一個詞。

2.3 查看分詞效果通用接口

GET  http://192.168.1.11:9200/_analyze

參數:

{
"analyzer": "standard",
"text": "I am a man."
}

響應:

{
"tokens": [
{
"token": "i",
"start_offset": 0,
"end_offset": 1,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "am",
"start_offset": 2,
"end_offset": 4,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "a",
"start_offset": 5,
"end_offset": 6,
"type": "<ALPHANUM>",
"position": 2
},
{
"token": "man",
"start_offset": 7,
"end_offset": 10,
"type": "<ALPHANUM>",
"position": 3
}
]
}

3. IK分詞器

3.1 概述

Elasticsearch中內置的分詞器不能對中文進行分詞,因此我們需要再安裝一個能够支持中文的分詞器,IK分詞器就是個不錯的選擇。

3.2 下載IK分詞器

下載網址:https://github.com/medcl/elasticsearch-analysis-ik

3.3 IK分詞器的安裝

1)為IK分詞器創建目錄

# cd /usr/local/elasticsearch-7.14.1/plugins

# mkdir ik

2)將IK分詞器壓縮包拷貝到CentOS7的目錄下,例如:/home

3)將壓縮包解壓到剛剛創建的目錄

# unzip elasticsearch-analysis-ik-7.14.1.zip -d /usr/local/elasticsearch-7.14.1/plugins/ik/

4)重啟Elasticsearch

3.4 IK分詞器介紹

ik_max_word: 會將文本做最細粒度的拆分,適合 Term Query;

ik_smart: 會做最粗粒度的拆分,適合 Phrase 查詢。

IK分詞器介紹來源於GitHub:https://github.com/medcl/elasticsearch-analysis-ik

3.5 分詞效果

GET http://192.168.1.11:9200/_analyze

參數:

{
"analyzer": "ik_max_word",
"text": "我是一名Java高級程序員"
}

響應:

{
"tokens": [
{
"token": "我",
"start_offset": 0,
"end_offset": 1,
"type": "CN_CHAR",
"position": 0
},
{
"token": "是",
"start_offset": 1,
"end_offset": 2,
"type": "CN_CHAR",
"position": 1
},
{
"token": "一名",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 2
},
{
"token": "一",
"start_offset": 2,
"end_offset": 3,
"type": "TYPE_CNUM",
"position": 3
},
{
"token": "名",
"start_offset": 3,
"end_offset": 4,
"type": "COUNT",
"position": 4
},
{
"token": "java",
"start_offset": 4,
"end_offset": 8,
"type": "ENGLISH",
"position": 5
},
{
"token": "高級",
"start_offset": 8,
"end_offset": 10,
"type": "CN_WORD",
"position": 6
},
{
"token": "程序員",
"start_offset": 10,
"end_offset": 13,
"type": "CN_WORD",
"position": 7
},
{
"token": "程序",
"start_offset": 10,
"end_offset": 12,
"type": "CN_WORD",
"position": 8
},
{
"token": "員",
"start_offset": 12,
"end_offset": 13,
"type": "CN_CHAR",
"position": 9
}
]
}

4. 自定義詞庫

4.1 概述

在進行中文分詞時,經常出現分析出的詞不是我們想要的,這時我們就需要在IK分詞器中自定義我們自己詞庫。

例如:追風人,分詞後,只有 追風 和 人,而沒有 追風人,導致倒排索引後查詢時,用戶搜 追風 或 人 可以搜到 追風人,搜 追風人 反而搜不到 追風人。

4.2 自定義詞庫

# cd /usr/local/elasticsearch-7.14.1/plugins/ik/config

# vi IKAnalyzer.cfg.xml

在配置文件中增加自己的字典

# vi my.dic

在文本中加入 追風人,保存。

重啟Elasticsearch即可。

5. 綜述

今天簡單聊了一下 Elasticsearch(ES)分詞器的相關知識,希望可以對大家的工作有所幫助。

歡迎大家幫忙點贊、評論、加關注 :)

關注追風人聊Java,每天更新Java幹貨。

Elasticsearch(ES)分詞器的那些事兒的更多相關文章

  1. elasticsearch kibana + 分詞器安裝詳細步驟

    elasticsearch kibana + 分詞器安裝詳細步驟 一.准備環境 系統:Centos7 JDK安裝包:jdk-8u191-linux-x64.tar.gz ES安裝包:elasticse ...

  2. Elasticsearch之分詞器的作用

    前提 什麼是倒排索引? Analyzer(分詞器)的作用是把一段文本中的詞按一定規則進行切分.對應的是Analyzer類,這是一個抽象類,切分詞的具體規則是由子類實現的,所以對於不同的語言,要用不同的 ...

  3. Elasticsearch之分詞器的工作流程

    前提 什麼是倒排索引? Elasticsearch之分詞器的作用 Elasticsearch的分詞器的一般工作流程: 1.切分關鍵詞 2.去除停用詞 3.對於英文單詞,把所有字母轉為小寫(搜索時不區分 ...

  4. Elasticsearch修改分詞器以及自定義分詞器

    Elasticsearch修改分詞器以及自定義分詞器 參考博客:https://blog.csdn.net/shuimofengyang/article/details/88973597

  5. ES 09 - 定制Elasticsearch的分詞器 (自定義分詞策略)

    目錄 1 索引的分析 1.1 分析器的組成 1.2 倒排索引的核心原理-normalization 2 ES的默認分詞器 3 修改分詞器 4 定制分詞器 4.1 向索引中添加自定義的分詞器 4.2 測 ...

  6. 【分詞器及自定義】Elasticsearch中文分詞器及自定義分詞器

    中文分詞器 在lunix下執行下列命令,可以看到本來應該按照中文”北京大學”來查詢結果es將其分拆為”北”,”京”,”大”,”學”四個漢字,這顯然不符合我的預期.這是因為Es默認的是英文分詞器我需要為 ...

  7. elasticsearch中文分詞器(ik)配置

    elasticsearch默認的分詞:http://localhost:9200/userinfo/_analyze?analyzer=standard&pretty=true&tex ...

  8. elasticsearch 分析器 分詞器

    參考:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html 在全文搜索(Fu ...

  9. ElasticSearch中分詞器組件配置詳解

    首先要明確一點,ElasticSearch是基於Lucene的,它的很多基礎性組件,都是由Apache Lucene提供的,而es則提供了更高層次的封裝以及分布式方面的增强與擴展. 所以要想熟練的掌握 ...

  10. 聊聊 elasticsearch 之分詞器配置 (IK+pinyin)

    系統:windows 10 elasticsearch版本:5.6.9 es分詞的選擇 使用es是考慮服務的性能調優,通過讀寫分離的方式降低頻繁訪問數據庫的壓力,至於分詞的選擇考慮主要是根據目前比較流 ...

隨機推薦

  1. KEGG數據庫

    參考:KEGG數據庫中文教程 - 博奧  &[學習筆記]KEGG數據庫 - 微信 學習一個技能最主要的事情你必須知道,那就是能通過它來做什麼? KEGG數據庫裏面有什麼? 如何查詢某一特定的代 ...

  2. 微信JS SDK Demo 官方案例[轉]

    摘要: 微信JS-SDK是微信公眾平臺面向網頁開發者提供的基於微信內的網頁開發工具包. 通過使用微信JS-SDK,網頁開發者可借助微信高效地使用拍照.選圖.語音.比特置等手機系統的能力,同時可以直接使用 ...

  3. CSS布局學習筆記之position

    CSS知識點 之 position布局 前段時間被同學慫恿,參加了百度前端技術學院的一個小培訓,第一個階段下來學到不少東西.課程的第一個階段主要是HTML5 和 CSS 基礎知識的一個小培訓,給出的一 ...

  4. RMAN_學習筆記3_RMAN Catalog恢複目錄

    2014-12-23 Created By BaoXinjian

  5. Linux(9.21-9.27)學習筆記

    一.Vim的基本操作. Normal模式下 1.h 鍵 向左移動光標   2.  j  鍵  向下移動光標   3. k 鍵 向上移動光標 4. l鍵  向右移動光標 5.x 鍵  删除光標所在比特置的 ...

  6. HDU2829

    題目大意:給定一個長度為n的序列,至多將序列分成m+1段,每段序列都有權值,權值為序列內兩個數兩兩相乘之和.m<=n<=1000. 分析:令w[i,j]錶示區間[i,j]中兩兩乘積之和,f ...

  7. UML系列圖--用例圖

    UML-Unified Model Language 統一建模語言,又稱標准建模語言.是用來對軟件密集系統進行可視化建模的一種語言. 在UML系統開發中有三個主要的模型: 功能模型: 從用戶的角度展示 ...

  8. Swift 了解(1)

    Apple取消了oc的指針以及其他不安全的訪問的使用,舍弃的smalltalk語法,全面改為點語法,提供了類似java的命名空間 範型 重載: 首先我們了解一下Swift這門語言.Swift就像C語言 ...

  9. 原生javascript實現回到頂部平滑滾動

    function rt() { var d = document, dd = document.documentElement, db = document.body, top = dd.scroll ...

  10. vue中兄弟組件間 的傳值 bus(可以理解為公共交通)

    點擊大兒子(頭部組件的年月日,下面的都要變化) 就相當於點擊了年月日之後,下面的組件重新調接口,參數變化       1.首先隨便哪兒寫個bus.js 內容如下: import Vue from 'v ...