一個非常hao用的elasticsearch中文分詞器插件 HaoAnalyzer

首先上地址

elasticsearch (es) hao 分詞器 中文分詞器
elasticsearch-analysis-hao

ES HAO 分詞器

簡介

如何開發(fā)一個ES分詞插件請參考 這里

主要參考了 IKHanLP
其中有的源碼是直接搬運的。
相比IK,比IK更智能,更準確,更快。
相比HanLp,比HanLP更輕量,分詞更可控,沒有一些智能的預測功能,并且HanLP也沒有官方的ES插件。

主要是IK ik_max_word是窮舉所有可能詞,導致搜索一些不相關的也會被搜到。

任性沖動過分詞結果居然有任性 性沖動 動過,那么搜性沖動就會把這個doc搜索到。

南京市長江大橋,結果是南京市 市長 長江大橋,那么搜市長會把這個doc搜索到。
HanLPDijkstraSegment抄了過來,同時做了一些優(yōu)化。

  1. 根據(jù)詞頻計算最短路,窮舉出可能的詞,而不是所有的詞,如果窮舉的詞不對,可以調詞頻來糾正。

  2. 支持emoji。

  3. 支持元詞,比如俄羅斯不會再拆分成羅斯羅斯是常用人名)。這樣搜羅斯就不會把俄羅斯相關文檔召回

不支持詞性

提供
Analyzer: hao_search_mode, hao_index_mode
Tokenizer: hao_search_mode, hao_index_mode

Versions

Git tag ES version
master ES最新穩(wěn)定版
v7.7.1 7.7.1
vX.Y.Z X.Y.Z

使用

安裝

方式1. bin/elasticsearch-plugin install file:///Users/xiaoming/Download/analysis-hao.zip

方式2. 解壓后,放在es plugins目錄即可。

最后重啟ES

ES 版本升級

如果沒有你需要的對應ES版本,修改pom.xml->elasticsearch.version的值為對應版本,然后執(zhí)行
mvn clean package -Dmaven.test.skip=true,就可以得到插件的zip安裝包。

自定義分詞器

下面是自定義分詞器可用的配置項


配置項參數(shù) 功能 默認值
enableIndexMode 是否使用index模式,index模式為細顆粒度。 hao_search_modefalsehao_index_modetrue,細顆粒度適合Term Query,粗顆粒度適合Phrase查詢
enableFallBack 如果分詞報錯,是否啟動最細粒度分詞,即按字分。建議search_mode使用,不至于影響用戶搜索。index_mode不啟動,以便及時報錯告警通知。 false不啟動降級
enableFailDingMsg 是否啟動失敗釘釘通知,通知地址為HttpAnalyzer.cfg.xmldingWebHookUrl字段。 false
enableSingleWord 是否使用細粒度返回的單字。比如體力值,分詞結果只存體力值,體力,而不存 false

HaoAnalyzer.cfg.xml 配置


參數(shù) 功能 備注
baseDictionary 基礎詞庫文件名 放在插件config目錄或者es的config目錄,不用更改
customerDictionaryFile 用戶自定義遠程詞庫文件 會存儲在插件config目錄或者es的config目錄
remoteFreqDict 遠程用戶自定義詞庫文件 方便熱更新,熱更新通過下面兩個參數(shù)定時更新。
syncDicTim 遠程詞庫第一次同步時間 hh:mm:ss -
syncDicPeriodTime 遠程詞庫同步時間間隔,秒 比如 syncDicTime=20:00:00,syncDicPeriodTime=86400,則是每天20點同步
dingWebHookUrl 釘釘機器人url 用于分詞異常,同步詞庫異常/成功通知
dingMsgContent 機器人通知文案 注意配置釘釘機器人的時候關鍵詞要和這個文案匹配,不然會消息發(fā)送失敗

詞庫說明

優(yōu)先讀取 {ES_HOME}/config/analysis-hao/目錄,沒有讀取 {ES_HOME}/plugins/analysis-hao/config目錄下的文件

  • 基礎詞庫
    基礎詞庫是base_dictionary.json,是一個json文件,key為詞,value為詞頻(int)。是可以修改的,可以添加詞,可以修改詞頻。
    例如:奮發(fā)圖強 分詞結果是 , 發(fā)圖, , 是因為發(fā)圖這個詞的詞頻太高了(因為出現(xiàn)次數(shù)高),則可以降低詞頻,手動修改base_dictionary.json文件就好了。
  • 遠程詞庫
    用戶自定義詞庫會按照配置的時間和周期定期執(zhí)行。
    從遠程詞庫更新完成后會自動覆蓋現(xiàn)在的customerDictionaryFile。
    遠程詞庫的文件格式每行格式為 {詞},{詞頻},{是否元詞}, 例如俄羅斯,1000,1。
    是否元詞字段解釋:
    1代表是元詞,不會再細拆分,俄羅斯不會再拆分成羅斯(羅斯是常用人名)。這樣搜羅斯就不會把俄羅斯相關文檔召回。
    0就是可以繼續(xù)細拆分,比如奮發(fā)圖強

示例索引demo

建索引:

PUT test/
{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "search_analyzer": {
            "filter": [
              "lowercase"
            ],
            "char_filter": [
              "html_strip"
            ],
            "type": "custom",
            "tokenizer": "my_search_token"
          },
          "title_analyzer": {
            "filter": [
              "lowercase"
            ],
            "char_filter": [
              "html_strip"
            ],
            "type": "custom",
            "tokenizer": "my_title_index_token"
          }
        },
        "tokenizer": {
          "my_title_index_token": {
            "enableOOV": "false",
            "enableFailDingMsg": "true",
            "type": "hao_index_mode",
            "enableSingleWord": "true",
            "enableFallBack": "true"
          },
          "my_search_token": {
            "enableOOV": "false",
            "enableFailDingMsg": "true",
            "type": "hao_search_mode",
            "enableSingleWord": "true",
            "enableFallBack": "true"
          }
        }
      },
      "number_of_replicas": "0"
    }
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "index_options": "offsets",
        "analyzer": "title_analyzer",
        "search_analyzer": "search_analyzer"
      }
    }
  }
}

測試分詞

test/_analyze
{
  "analyzer": "title_analyzer",
  "text": "奮發(fā)圖強打籃球有利于提高人民生活,有的放矢,中華人民共和國家庭宣傳委員會宣。??"
}

test/_analyze
{
  "analyzer": "search_analyzer",
  "text": "奮發(fā)圖強打籃球有利于提高人民生活,有的放矢,中華人民共和國家庭宣傳委員會宣。??"
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容