1. 程式人生 > 其它 >es - elasticsearch自定義分析器 - 內建分詞過濾器 - 7

es - elasticsearch自定義分析器 - 內建分詞過濾器 - 7

技術標籤:stack - eses

世界上並沒有完美的程式,但是我們並不因此而沮喪,因為寫程式就是一個不斷追求完美的過程。

自定義分析器 :

  1. Character filters :
    1. 作用 : 字元的增、刪、改轉換
    2. 數量限制 : 可以有0個或多個
    3. 內建字元過濾器 :
    1. HTML Strip Character filter : 去除html標籤
    2. Mapping Character filter : 對映替換
    3. Pattern Replace Character filter : 正則替換
  2. Tokenizer :
    1. 作用 :
    1. 分詞
    2. 記錄詞的順序和位置(短語查詢)
    3. 記錄詞的開頭和結尾位置(高亮)
    4. 記錄詞的型別(分類)
    2. 數量限制 : 有且只能有一個
    3. 分類 :
    1. 完整分詞 :
    1. Standard
    2. Letter
    3. Lowercase
    4. whitespace
    5. UAX URL Email
    6. Classic
    7. Thai
    2. 切詞 :
    1. N-Gram
    2. Edge N-Gram
    3. 文字 :
    1. Keyword
    2. Pattern
    3. Simple Pattern
    4. Char Group
    5. Simple Pattern split
    6. Path
  3. Token filters :
    1. 作用 : 分詞的增、刪、改轉換
    2. 數量限制 : 可以有0個或多個
    3. 分類 :
    1. apostrophe
    2. asciifolding
    3. cjk bigram
    4. cjk width
    5. classic
    6. common grams
    7. conditional
    8. decimal digit
    9. delimited payload
    10. dictionary decompounder
    11. edge ngram
    12. elision
    13. fingerprint
    14. flatten_graph
    15. hunspell
    16. hyphenation decompounder
    17. keep types
    18. keep words
    19. keyword marker
    20. keyword repeat
    21. kstem
    22. length
    23. limit token count
    24. lowercase
    25. min_hash

今天演示24-25,感覺min_hash很重要

# lowercase token filter
# 作用   : 轉為小寫
# 配置項 :
#   1. language :
#      1. greek   : 希臘語
#      2. irish   : 愛爾蘭語
#      3. turkish : 土耳其語
GET /_analyze
{
  "tokenizer" : "standard",
  "filter"    : ["lowercase"],
  "text"      : ["Hello Good me"]
}

# 結果
{
  "tokens" : [
    {
      "token" : "hello",
      "start_offset" : 0,
      "end_offset" : 5,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "good",
      "start_offset" : 6,
      "end_offset" : 10,
      "type" : "<ALPHANUM>",
      "position" : 1
    },
    {
      "token" : "me",
      "start_offset" : 11,
      "end_offset" : 13,
      "type" : "<ALPHANUM>",
      "position" : 2
    }
  ]
}
# minhash token filter
# 作用 : 為文件hash簽名以用作文件相似度查詢
# 原理 :
#    1. 計算每一個分詞的hash
#    2. 將雜湊值分配給儲存桶,只保留每個儲存桶中最小的雜湊值。
#    3. 每個桶中最小的hash值作為分詞結果
# 配置項 :
#    1. bucket_count  : hash值分配的桶的數量,預設512
#    2. hash_count    : 計算hash值的方式,預設1
#    3. hash_set_size : 每個桶儲存hash值的個數,預設1,並且是最小的hash值
#    4. with_rotation : 如果為true,則hash_set_size為1時,過濾器將用其迴圈右邊第一個非空桶的值填充空桶。如果引數bucket_count大於1,該引數預設為true。否則,此引數預設為false。

GET /_analyze
{
  "tokenizer" : "standard",
  "filter" : [{
    "type"          : "min_hash",
    "hash_count"    : 1,
    "bucket_count"  : 512,
    "hash_set_size" : 1,
    "with_rotation" : true
  }],
  "text": ["Hello good me"]
}

# 結果
{
  "tokens" : [
    {
      "token" : """饠ﰹ몏匭�釲䶞""",
      "start_offset" : 0,
      "end_offset" : 13,
      "type" : "MIN_HASH",
      "position" : 0
    },
    {
      "token" : """饠ﰹ몏匭�釲䶞""",
      "start_offset" : 0,
      "end_offset" : 13,
      "type" : "MIN_HASH",
      "position" : 0
    },
    {
      "token" : """饠ﰹ몏匭�釲䶞""",
      "start_offset" : 0,
      "end_offset" : 13,
      "type" : "MIN_HASH",
      "position" : 0
    }, ......