Elasticsearch 7.x 深入【5】analyze API及自定義分詞器

1. 借鑒

極客時間 阮一鳴老師的Elasticsearch核心技術(shù)與實戰(zhàn)
Elasticsearch 分詞器
Elasticsearch 默認分詞器和中分分詞器之間的比較及使用方法
Elasticsearch系列---使用中文分詞器
官網(wǎng) character filters
官網(wǎng) tokenizers
官網(wǎng) token filters

2. 開始

一、analyze api

方式1 指定分詞器

GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "Hello Lady, I'm Elasticsearch ^_^"
}

方式2 指定索引及屬性字段

GET /tmdb_movies/_analyze
{
  "field": "title",
  "text": "Basketball with cartoon alias"
}

方式3 自定義分詞

GET /_analyze
{
  "tokenizer": "standard",
  "filter": ["lowercase"],
  "text": "Machine Building Industry Epoch"
}

二檀咙、自定義分詞器

  • 分詞器是由三部分組成的雅倒,分別是character filter, tokenizer, token filter

character filter[字符過濾器]

處理原始文本,可以配置多個弧可,會影響到tokenizer的position和offset信息
在es中有幾個默認的字符過濾器

  • HTML Strip
    去除html標簽
  • Mapping
    字符串替換
  • Pattern Replace
    正則匹配替換

舉個栗子

html_strip
GET _analyze
{
  "tokenizer": "keyword",
  "char_filter": ["html_strip"],
  "text": "<br>you know, for search</br>"
}
  • 結(jié)果
{
  "tokens" : [
    {
      "token" : """

you know, for search

""",
      "start_offset" : 0,
      "end_offset" : 29,
      "type" : "word",
      "position" : 0
    }
  ]
}
mapping
GET _analyze
{
  "tokenizer": "whitespace",
  "char_filter": [
    {
      "type": "mapping",
      "mappings": ["- => "]
    },
    "html_strip"
  ],
  "text": "<br>中國-北京 中國-臺灣 中國-人民</br>"
}
  • 結(jié)果
{
  "tokens" : [
    {
      "token" : "中國北京",
      "start_offset" : 4,
      "end_offset" : 9,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "中國臺灣",
      "start_offset" : 10,
      "end_offset" : 15,
      "type" : "word",
      "position" : 1
    },
    {
      "token" : "中國人民",
      "start_offset" : 16,
      "end_offset" : 21,
      "type" : "word",
      "position" : 2
    }
  ]
}
pattern_replace
GET /_analyze
{
  "tokenizer": "keyword",
  "char_filter": [
    {
      "type": "pattern_replace",
      "pattern": "https?://(.*)",
      "replacement": "$1"
    }],
    "text": "https://www.elastic.co"
}
  • 結(jié)果
{
  "tokens" : [
    {
      "token" : "www.elastic.co",
      "start_offset" : 0,
      "end_offset" : 22,
      "type" : "word",
      "position" : 0
    }
  ]
}

tokenizer[分詞器]

將原始文本按照一定規(guī)則蔑匣,切分成詞項(字符處理)
在es中有幾個默認的分詞器

  • standard
  • letter
  • lowercase
  • whitespace
  • uax url email
  • classic
  • thai
  • n-gram
  • edge n-gram
  • keyword
  • pattern
  • simple
  • char group
  • simple pattern split
  • path

舉個栗子

path_hierarchy
GET /_analyze
{
  "tokenizer": "path_hierarchy",
  "text": ["/usr/local/bin/java"]
}
  • 結(jié)果
{
  "tokens" : [
    {
      "token" : "/usr",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "/usr/local",
      "start_offset" : 0,
      "end_offset" : 10,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "/usr/local/bin",
      "start_offset" : 0,
      "end_offset" : 14,
      "type" : "word",
      "position" : 0
    },
    {
      "token" : "/usr/local/bin/java",
      "start_offset" : 0,
      "end_offset" : 19,
      "type" : "word",
      "position" : 0
    }
  ]
}

token filter[分詞過濾]

將tokenizer輸出的詞項進行處理,如:增加侣诺,修改殖演,刪除
在es中有幾個默認的分詞過濾器

  • lowercase
  • stop
  • uppercase
  • reverse
  • length
  • n-gram
  • edge n-gram
  • pattern replace
  • trim
  • ...[更多參照官網(wǎng),目前僅列舉用到的]

舉個栗子

GET /_analyze
{
  "tokenizer": "whitespace",
  "filter": ["stop"],
  "text": ["how are you i am fine thank you"]
}

三年鸳、自定義分詞器

自定義也無非是定義char_filter趴久,tokenizer,filter(token filter)

DELETE /my_analysis
PUT /my_analysis
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "char_filter": [
            "my_char_filter"
            ],
          "tokenizer": "my_tokenizer",
          "filter": [
            "my_tokenizer_filter"
            ]
        }
      },
      "char_filter": {
        "my_char_filter": {
          "type": "mapping",
          "mappings": ["_ => "]
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "pattern",
          "pattern": "[,.!? ]"
        }
      },
      "filter": {
        "my_tokenizer_filter": {
          "type": "stop",
          "stopword": "__english__"
        }
      }
    }
  }
}
POST /my_analysis/_analyze
{
  "analyzer": "my_analyzer",
  "text": ["Hello Kitty!, A_n_d you?"]
}

3. 大功告成

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搔确,一起剝皮案震驚了整個濱河市彼棍,隨后出現(xiàn)的幾起案子灭忠,更是在濱河造成了極大的恐慌,老刑警劉巖座硕,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弛作,死亡現(xiàn)場離奇詭異,居然都是意外死亡华匾,警方通過查閱死者的電腦和手機映琳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜘拉,“玉大人萨西,你說我怎么就攤上這事⌒裥瘢” “怎么了谎脯?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長持寄。 經(jīng)常有香客問我源梭,道長,這世上最難降的妖魔是什么稍味? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任废麻,我火速辦了婚禮,結(jié)果婚禮上仲闽,老公的妹妹穿的比我還像新娘脑溢。我一直安慰自己,他們只是感情好赖欣,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著验庙,像睡著了一般顶吮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粪薛,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天悴了,我揣著相機與錄音,去河邊找鬼违寿。 笑死湃交,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的藤巢。 我是一名探鬼主播搞莺,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼掂咒!你這毒婦竟也來了才沧?” 一聲冷哼從身側(cè)響起迈喉,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎温圆,沒想到半個月后挨摸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡岁歉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年得运,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锅移。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡澈圈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帆啃,到底是詐尸還是另有隱情瞬女,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布努潘,位于F島的核電站诽偷,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疯坤。R本人自食惡果不足惜报慕,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望压怠。 院中可真熱鬧眠冈,春花似錦、人聲如沸菌瘫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雨让。三九已至雇盖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間栖忠,已是汗流浹背崔挖。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留庵寞,地道東北人狸相。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像捐川,于是被迫代替她去往敵國和親脓鹃。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354