精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

ElasticSearch 如何使用 ik 進行中文分詞?

運維 數據庫運維
本篇文章則著重分析 ElasticSearch 在全文搜索前如何使用 ik 進行分詞,讓大家對 ElasticSearch 的全文搜索和 ik 中文分詞原理有一個全面且深入的了解。

[[392391]]

本文轉載自微信公眾號「程序員歷小冰」,作者歷小冰。轉載本文請聯系程序員歷小冰公眾號。   

本篇文章則著重分析 ElasticSearch 在全文搜索前如何使用 ik 進行分詞,讓大家對 ElasticSearch 的全文搜索和 ik 中文分詞原理有一個全面且深入的了解。

全文搜索和精確匹配

ElasticSearch 支持對文本類型數據進行全文搜索和精確搜索,但是必須提前為其設置對應的類型:

  • keyword 類型,存儲時不會做分詞處理,支持精確查詢和分詞匹配查詢;
  • text 類型,存儲時會進行分詞處理,也支持精確查詢和分詞匹配查詢。

比如,創建名為 article 的索引(Index),并為其兩個字段(Filed)配置映射(Mapping),文章內容設置為 text 類型,而文章標題設置為 keyword 類型。

Elasticsearch 在進行存儲時,會對文章內容字段進行分詞,獲取并保存分詞后的詞元(tokens);對文章標題則是不進行分詞處理,直接保存原值。

上圖的右半邊展示了 keyword 和 text 兩種類型的不同存儲處理過程。而左半邊則展示了 ElasticSearch 相對應的兩種查詢方式:

  • term 查詢,也就是精確查詢,不進行分詞,而是直接根據輸入詞進行查詢;
  • match 查詢,也就是分詞匹配查詢,先對輸入詞進行分詞,然后逐個對分詞后的詞元進行查詢。

舉個例子,有兩篇文章,一篇的標題和內容都是“程序員”,另外一篇的標題和內容都是“程序”,那么二者在 ElasticSearch 中的倒排索引存儲如下所示(假設使用特殊分詞器)。

這時,分別使用 term 和 match 查詢對兩個字段進行查詢,就會得出如圖右側的結果。

Analyzer 處理過程

可見,keyword 與 text 類型, term 與 match 查詢方式之間不同就在于是否進行了分詞。在 ElasticSearch 中將這個分詞的過程統稱了 Text analysis,也就是將字段從非結構化字符串(text)轉化為結構化字符串(keyword)的過程。

Text analysis 不僅僅只進行分詞操作,而是包含如下流程:

  • 使用字符過濾器(Character filters),對原始的文本進行一些處理,例如去掉空白字符等;
  • 使用分詞器(Tokenizer),對原始的文本進行分詞處理,得到一些詞元(tokens);
  • 使用詞元過濾器(Token filters),對上一步得到的詞元繼續進行處理,例如改變詞元(小寫化),刪除詞元(刪除量詞)或增加詞元(增加同義詞),合并同義詞等。

ElasticSearch 中處理 Text analysis 的組件被稱為 Analyzer。相應地,Analyzer 也由三部分組成,character filters、tokenizers 和 token filters。

Elasticsearch 內置了 3 種字符過濾器、10 種分詞器和 31 種詞元過濾器。此外,還可以通過插件機制獲取第三方實現的相應組件。開發者可以按照自身需求定制 Analyzer 的組成部分。

  1. "analyzer": { 
  2.     "my_analyzer": { 
  3.         "type":           "custom"
  4.         "char_filter":  [ "html_strip"], 
  5.         "tokenizer":      "standard"
  6.         "filter":       [ "lowercase",] 
  7.     } 

按照上述配置,my_analyzer 分析器的功能大致如下:

  • 字符過濾器是 html_strip,會去掉 HTML 標記相關的字符;
  • 分詞器是 ElasticSearch 默認的標準分詞器 standard;
  • 詞元過濾器是小寫化 lowercase 處理器,將英語單詞小寫化。

一般來說,Analyzer 中最為重要的就是分詞器,分詞結果的好壞會直接影響到搜索的準確度和滿意度。ElasticSearch 默認的分詞器并不是處理中文分詞的最優選擇,目前業界主要使用 ik 進行中文分詞。

ik 分詞原理

ik 是目前較為主流的 ElasticSearch 開源中文分詞組件,它內置了基礎的中文詞庫和分詞算法幫忙開發者快速構建中文分詞和搜索功能,它還提供了擴展詞庫字典和遠程字典等功能,方便開發者擴充網絡新詞或流行語。

ik 提供了三種內置詞典,分別是:

  • main.dic:主詞典,包括日常的通用詞語,比如程序員和編程等;
  • quantifier.dic:量詞詞典,包括日常的量詞,比如米、公頃和小時等;
  • stopword.dic:停用詞,主要指英語的停用詞,比如 a、such、that 等。

此外,開發者可以通過配置擴展詞庫字典和遠程字典對上述詞典進行擴展。

ik 跟隨 ElasticSearch 啟動時,會將默認詞典和擴展詞典讀取并加載到內存,并使用字典樹 tire tree (也叫前綴樹)數據結構進行存儲,方便后續分詞時使用。

字典樹的典型結構如上圖所示,每個節點是一個字,從根節點到葉節點,路徑上經過的字符連接起來,為該節點對應的詞。所以上圖中的詞包括:程序員、程門立雪、編織、編碼和工作。

一、加載字典

ik 的 Dictionary 單例對象會在初始化時,調用對應的 load 函數讀取字典文件,構造三個由 DictSegment 組成的字典樹,分別是 MainDict、QuantifierDict 和 StopWords。我們下面就來看一下其主詞典的加載和構造過程。loadMainDict 函數較為簡單,它會首先創建一個 DictSegment 對象作為字典樹的根節點,然后分別去加載默認主字典,擴展主字典和遠程主字典來填充字典樹。

復制代碼

在 loadDictFile 函數執行過程中,會從詞典文件讀取一行一行的詞,交給 DictSegment 的fillSegment 函數處理。

fillSegment 是構建字典樹的核心函數,具體實現如下所示,處理邏輯大致有如下幾個步驟:

一、按照索引,獲取詞中的一個字;

二、檢查當前節點的子節點中是否有該字,如果沒有,則將其加入到 charMap中;

三、調用 lookforSegment 函數在字典樹中尋找代表該字的節點,如果沒有則插入一個新的;

四、遞歸調用 fillSegment 函數處理下一個字。

ik 初始化過程大致如此,再進一步詳細的邏輯大家可以直接去看源碼,中間都是中文注釋,相對來說較為容易閱讀。

二、分詞邏輯

ik 中實現了 ElasticSearch 相關的抽象類,來提供自身的分詞邏輯實現:

  • IKAnalyzer 繼承了 Analyzer ,用來提供中文分詞的分析器;
  • IKTokenizer 繼承了 Tokenizer,用來提供中文分詞的分詞器,其 incrementToken 是 ElasticSearch 調用 ik 進行分詞的入口函數。

incrementToken 函數會調用 IKSegmenter 的 next方法,來獲取分詞結果,它是 ik 分詞的核心方法。

如上圖所示,IKSegmenter 中有三個分詞器,在進行分詞時會遍歷詞中的所有字,然后將單字按照順序,讓三個分詞器進行處理:

  • LetterSegmenter,英文分詞器比較簡單,就是把連續的英文字符進行分詞;
  • CN_QuantifierSegmenter,中文量詞分詞器,判斷當前的字符是否是數詞和量詞,會把連起來的數詞和量詞分成一個詞;
  • CJKSegmenter,核心分詞器,基于前文的字典樹進行分詞。

我們只講解一下 CJKSegmenter 的實現,其 analyze 函數大致分為兩個邏輯:

  • 根據單字去字典樹中進行查詢,如果單字是詞,則生成詞元;如果是詞前綴,則放入到臨時命中列表中;
  • 然后根據單字和之前處理時保存的臨時命中列表數據一起去字典樹中查詢,如果命中,則生成詞元。

具體的代碼邏輯,如上所示。為了方便大家理解,舉個例子,比如輸入的詞是 編碼工作:

  • 首先處理編字;
    • 因為當前 tmpHits 為空,直接進行單字判斷;
    • 直接拿 編 字去前文示意圖的字典樹查詢(詳見 matchInMainDict 函數),發現能夠命中,并且該字不是一個詞的結尾,所以將 編 和其在輸入詞中的位置生成 Hit 對象,存儲到 tmpHits 中。
  • 接著處理 碼 字;
    • 因為 tmpHits 不為空,所以拿著 編 對應的 Hit 對象和 碼字去字典樹中查詢(詳見 matchWithHit 函數), 發現命中了 編碼 一詞,所以將這個詞作為輸出詞元之一,存入 AnalyzeContext;但是因為 碼 已經是葉節點,并沒有子節點,表示不是其他詞的前綴,所以將對應的 Hit 對象刪除掉;
    • 接著拿單字 碼 去字典樹中查詢,看單字是否成詞,或者構成詞的前綴。
  • 依次類推,將所有字處理完。

三、消除歧義和結果輸出

通過上述步驟,有時候會生成很多分詞結果集合,比如說,程序員愛編程 會被分成 程序員、程序、員、愛 和 編程 五個結果。這也是 ik 的 ik_max_word 模式的輸出結果。但是有些場景,開發者希望只有 程序員、愛 和 編程 三個分詞結果,這時就需要使用 ik 的 ik_smart 模式,也就是進行消除歧義處理。

ik 使用 IKArbitrator 進行消除歧義處理,主要使用組合遍歷的方式進行處理。從上一階段的分詞結果中取出不相交的分詞集合,所謂相交,就是其在文本中出現的位置是否重合。比如 程序員、程序 和 員 三個分詞結果是相交的,但是 愛 和 編程 是不相交的。所以分歧處理時會將 程序員、程序 和 員 作為一個集合,愛 作為一個集合,編碼 作為一個集合,分別進行處理,將集合中按照規則優先級最高的分詞結果集選出來,具體規則如下所示:

  • 有效文本長度長優先;
  • 詞元個數少優先;
  • 路徑跨度大優先;
  • 位置越靠后的優先,因為根據統計學結論,逆向切分概率高于正向切分;
  • 詞長越平均優先;
  • 詞元位置權重大優先。

根據上述規則,在第一個集合中,程序員 明顯要比 程序 和 員 要更符合規則,所以消除歧義的結果就是輸出 程序員,而不是 程序 和 員。

最后,對于輸入字來說,有些位置可能并不在輸出結果中,所以會以單字的方式作為詞元直接輸出(詳見AnalyzeContext 的 outputToResult 函數)。比如 程序員是職業,是 字是不會被分詞出來的,但是在最終輸出結果時,要將其作為單字輸出。

后記

 

ElasticSearch 和 ik 組合是目前較為主流的中文搜索技術方案,理解其搜索和分詞的基礎流程和原理,有利于開發者更快地構建中文搜索功能,或基于自身需求,特殊定制搜索分詞策略。

 

責任編輯:武曉燕 來源: 程序員歷小冰
相關推薦

2021-09-03 11:26:39

分詞器ElasticSear

2012-03-16 10:07:30

IK AnalyzerJava

2024-08-02 11:00:00

分詞器搜索查詢

2009-12-04 14:29:09

PHP json_en

2017-05-04 10:11:51

ElasticsearJavaAnalyzeRequ

2023-12-14 15:27:12

中文分詞Python

2023-11-28 18:03:01

SQLUDF

2011-04-12 10:27:44

斐訊促銷

2013-11-11 14:18:42

IDC

2009-12-08 11:20:59

互聯網

2021-06-16 09:02:43

Pythonjieba分詞Python基礎

2017-02-23 10:50:32

Python微博數據

2014-04-22 13:39:31

UPYUN開發者大賽

2021-06-09 09:36:18

DjangoElasticSearLinux

2016-09-18 23:56:51

Java開源中文分詞器

2011-06-03 16:04:05

SEO分詞

2023-02-27 07:37:56

Curl操作SQL

2010-03-11 17:38:20

Python中文

2010-02-22 09:54:19

Ubuntu mysq
點贊
收藏

51CTO技術棧公眾號

白白色 亚洲乱淫| 精品freesex老太交| 亚洲国产精品久久人人爱| 激情视频在线观看一区二区三区| 99re这里只有精品在线| 我不卡伦不卡影院| 日韩精品视频在线播放| 在线能看的av网站| 一本大道色婷婷在线| 国产精品精品国产色婷婷| 国产超碰91| 亚洲精品毛片一区二区三区| 午夜欧美理论片| 亚洲性日韩精品一区二区| 红桃视频一区二区三区免费| 九色porny丨国产首页在线| 国产精品网站一区| 精品国产乱码一区二区三区四区| 中文字幕永久免费视频| 国产日本精品| 久久成人亚洲精品| 欧美黄色一级生活片| 一区二区三区自拍视频| 欧美写真视频网站| 欧美 日韩 国产在线观看| 蜜桃视频在线观看www社区| 91色porny在线视频| 91超碰在线免费观看| japanese国产在线观看| 国产亚洲一区在线| 欧美激情va永久在线播放| 日韩中文字幕有码| 亚洲aa在线| 精品国产免费一区二区三区四区| 日韩在线不卡一区| 欧美大胆成人| 亚洲成人av在线电影| 亚洲天堂av免费在线观看| 国产在线播放av| 91在线一区二区| 国产二区一区| 亚洲黄色一级大片| 国产乱码精品一品二品| 欧美这里只有精品| 国产精品入口免费软件| 日韩伦理在线一区| 亚洲成a人片在线不卡一二三区| 亚洲人成网站在线观看播放| 韩国中文免费在线视频| 91免费观看视频| 久久99精品久久久久久青青日本| 亚洲精品综合网| 国产91精品露脸国语对白| 亚洲自拍小视频| 精品欧美一区二区精品少妇| 国产一区二区精品久久99| 国产欧美日韩亚洲精品| 中文字幕av网站| 毛片基地黄久久久久久天堂| 国产精品免费福利| 一级特黄aaa大片在线观看| 久久精品999| 成人精品一区二区三区电影黑人| 中文字幕在线一| 久久99精品国产麻豆不卡| 91视频免费网站| 午夜精品久久久久久久91蜜桃| 国产成人在线看| 狠狠色噜噜狠狠色综合久| 日韩av视屏| 亚洲国产精品黑人久久久| 宅男噜噜99国产精品观看免费| 成人福利网站| 亚洲国产日产av| av观看免费在线| 小明成人免费视频一区| 7777精品伊人久久久大香线蕉超级流畅 | √天堂资源在线| 国产一级成人av| 亚洲人a成www在线影院| 亚洲精品国产精品乱码在线观看| 99成人在线视频| 欧美夫妻性视频| 中文字幕av影院| 国产一区二区三区视频在线播放| 成人在线免费观看一区| 国产免费av在线| 亚洲少妇屁股交4| 缅甸午夜性猛交xxxx| 99久久er| 日韩精品一区二区三区老鸭窝| 国产精品福利导航| 手机在线一区二区三区| 久久久女女女女999久久| 欧美一区二区三区久久久| 国产精品亚洲成人| 国产三区二区一区久久| 亚洲精品承认| 午夜av区久久| 免费人成视频在线播放| 九九亚洲视频| 欧美—级高清免费播放| 欧美日韩在线视频播放| 成人网在线免费视频| 亚洲国产精品一区二区第一页| 91久久国产精品| 国产精品手机在线观看| 精品理论电影| 国模精品视频一区二区| 中文字幕精品一区二区精| 欧美精品第1页| 91免费视频黄| 欧美伦理91| 91精品国产综合久久精品麻豆 | 亚洲福利影视| 亚洲黄色片网站| 国产xxxxhd| 青草伊人久久| 亚洲网站在线播放| 四虎永久在线精品| 韩国毛片一区二区三区| 日本午夜一区二区三区| 亚洲乱码在线| 欧美一二区视频| 六月婷婷七月丁香| 国产精品啊v在线| 91免费高清视频| www视频在线观看免费| 午夜av区久久| 老司机免费视频| 欧美久久99| 成人久久久久久久| 日韩在线免费电影| 欧美亚洲综合久久| 国产av自拍一区| 性一交一乱一区二区洋洋av| 国产精品亚洲综合| 精精国产xxxx视频在线中文版| 6080亚洲精品一区二区| 免费黄色激情视频| 免费的成人av| 亚洲精品乱码视频| 天堂久久午夜av| 国产一区二区三区在线播放免费观看 | 伊人av成人| а√天堂资源国产精品| 国产一区二区三区在线免费观看| 中文字幕黄色片| 久久婷婷色综合| 黄色片久久久久| 久久综合欧美| 国产精品久久久久久av下载红粉 | 性色av一区二区三区| 亚洲伦理在线观看| 亚洲国产另类精品专区| a天堂视频在线观看| 99国内精品| 欧美在线播放一区| 本网站久久精品| 两个人的视频www国产精品| 国产又黄又爽视频| 夜夜精品视频一区二区| 艳妇乳肉豪妇荡乳xxx| 亚洲专区一区| 亚洲高清不卡一区| 24小时成人在线视频| 色综合91久久精品中文字幕| 三级小视频在线观看| 欧美日韩免费一区| 99精品全国免费观看| 国内精品伊人久久久久av一坑 | 蜜桃久久影院| 成人不卡视频| 欧美成人在线免费| 五月天婷婷视频| 91国产福利在线| 国产天堂av在线| 99精品欧美一区二区蜜桃免费 | 日韩 国产 欧美| 国产精品久久二区二区| 日韩女优在线视频| 人人狠狠综合久久亚洲| 欧美少妇一区二区三区| 美国一区二区| 国产中文字幕亚洲| 国产在线天堂www网在线观看| 亚洲最新视频在线| www.亚洲黄色| 欧美亚洲精品一区| 久久久美女视频| 欧美极品aⅴ影院| 少妇极品熟妇人妻无码| 日韩av中文在线观看| 日本精品免费视频| 美女网站一区| 高清视频一区| jizz免费一区二区三区| 午夜精品在线观看| 快射av在线播放一区| 精品偷拍一区二区三区在线看 | 91看片一区| 久久久久久美女| 日韩美女网站| 亚洲少妇激情视频| 亚洲精品国产手机| 欧美日韩黄色影视| 国产午夜免费福利| 亚洲高清三级视频| 国产黄a三级三级| 久久久99免费| 国产亚洲色婷婷久久99精品91| 精品一区二区三区免费毛片爱| 成人综合视频在线| 影音国产精品| 日日噜噜夜夜狠狠久久丁香五月 | 日韩中文字幕在线不卡| 日韩精品一卡| 欧美亚洲国产免费| 国产伦乱精品| 不卡一区二区三区四区五区| 96视频在线观看欧美| 国产精品久久久久999| 午夜伦理福利在线| 97精品一区二区视频在线观看| 四季久久免费一区二区三区四区| 精品国产一区二区三区久久久| 粉嫩av一区| 国产小视频国产精品| 日本福利片在线| 亚洲精品视频播放| 五月婷婷六月丁香综合| 亚洲精美色品网站| 涩涩视频免费看| 欧美精品一区二区久久久| 性做久久久久久久| 日韩欧美中文字幕精品| 成人黄色免费视频| 欧美精品一区二区三区蜜桃视频| 人妻无码一区二区三区久久99| 日韩三级.com| 亚洲av永久无码国产精品久久 | 国产剧情日韩欧美| 国产精品亚洲成在人线| 国产精品入口免费视| 欧美91看片特黄aaaa| 青青在线视频一区二区三区| 免费日韩电影| 国产精品白丝jk喷水视频一区 | 欧美久久久一区| 91久久精品无码一区二区| 欧美绝品在线观看成人午夜影视 | 日韩精品极品视频免费观看| 日本亚洲欧美| 在线观看不卡av| 中文字幕在线视频区| www.美女亚洲精品| 在线观看中文字幕的网站| 欧美高清无遮挡| 51精品在线| 日韩av电影院| 久久国产三级| 99一区二区| 琪琪久久久久日韩精品| 日韩欧美精品一区二区| 99久久亚洲精品| 大地资源网在线观看免费官网| 极品少妇一区二区三区| 国产精品97在线| 另类调教123区| 日批视频免费看| 26uuu久久综合| 国精产品视频一二二区| 亚洲综合色自拍一区| 天堂中文字幕在线观看| 欧美日韩综合一区| 精品区在线观看| 亚洲欧美一区二区三区在线| 男人天堂手机在线| 国模私拍视频一区| 国产精品亚洲d| 成人免费在线看片| 久久av资源| 路边理发店露脸熟妇泻火| 免费中文字幕日韩欧美| 制服丝袜中文字幕第一页| 9人人澡人人爽人人精品| 亚洲欧美va天堂人熟伦| 一区二区三区免费观看| 日韩综合在线观看| 精品国产一区二区三区久久影院 | 欧美日韩成人精品| 美女写真久久影院| 国产高清精品一区| 日韩国产一区| 欧美一级视频免费看| 久久99精品久久久久久动态图| 影音先锋黄色资源| 18欧美乱大交hd1984| 国产成人亚洲精品自产在线 | 热99精品只有里视频精品| 999精品视频在线观看| 久久久一本精品99久久精品66| 小说区亚洲自拍另类图片专区 | 日韩精品视频播放| 91精品蜜臀在线一区尤物| 男人的天堂在线| 年下总裁被打光屁股sp| 久久成人免费日本黄色| 国产大学生视频| 综合久久给合久久狠狠狠97色| 国产日产精品一区二区三区| 91精品国产欧美一区二区| 你懂的好爽在线观看| 久久久久久国产三级电影| 欧美性aaa| 欧美一区二区三区四区五区六区| 欧美日韩一区二区三区四区在线观看 | 99久久99| 国产精品二区不卡| 又色又爽又高潮免费视频国产| 成人免费视频播放| 美女的奶胸大爽爽大片| 欧美精品一二三四| 国产黄色免费在线观看| 欧美在线视频观看| 欧美日韩导航| 无码专区aaaaaa免费视频| 国产成人精品一区二区三区四区 | 婷婷开心久久网| 亚洲精品一级片| 欧美日韩电影在线观看| 精品欧美视频| 国产精品久久成人免费观看| 蜜桃视频在线观看一区二区| 亚洲精品一区二区三区影院忠贞| 狠狠色噜噜狠狠狠狠97| 亚欧在线观看视频| 97精品欧美一区二区三区| 国产精品巨作av| 水蜜桃色314在线观看| 懂色av一区二区三区免费观看| 玖玖爱这里只有精品| 欧美一区二区视频在线观看2022| 日本激情视频在线观看| 亚洲一区国产精品| 欧美国产91| 四虎永久免费观看| 午夜精品影院在线观看| 污视频网站在线播放| 欧美亚洲成人精品| 国产剧情一区| 国产一区二区在线免费播放| 国产精品情趣视频| 国产精品毛片一区视频播| 精品国产一区二区在线| 国产精品免费精品自在线观看| 国产四区在线观看| 国产成人午夜片在线观看高清观看| 欧美片一区二区| 亚洲国产女人aaa毛片在线| 偷拍自拍在线看| 午夜午夜精品一区二区三区文| 麻豆国产精品777777在线| 欧美大片xxxx| 亚洲国产日韩一区| 日韩av免费| 中国一级大黄大黄大色毛片| 成人深夜在线观看| 国产精品一区无码| 久久精品国产亚洲精品| 在线精品视频一区| 日本日本19xxxⅹhd乱影响| 国产欧美精品区一区二区三区 | 成人h在线观看| 国产精品美女在线播放| www.亚洲国产| 中文字幕日本人妻久久久免费 | 欧美日韩美女| 国产精品99久久久久久大便| 成人黄页毛片网站| 国产精品第6页| 欧美华人在线视频| 激情五月色综合国产精品| 亚洲一区二区三区四区精品 | 亚洲天堂中文字幕在线| 欧美人在线观看| 国产一区二区三区网| 久久无码人妻一区二区三区| 色综合天天综合| caopen在线视频| 欧美三日本三级少妇三99| 国产精品亚洲第一区在线暖暖韩国 | 亚洲制服国产| 日韩高清dvd| 丁香婷婷综合网| 国产尤物在线观看| 日本免费久久高清视频| 欧美精品一卡| 一区二区三区在线播放视频| 精品一区电影国产|