es - elasticsearch自定義分析器 - 內建分詞過濾器 - 7
阿新 • • 發佈:2021-02-03
技術標籤:stack - eses
世界上並沒有完美的程式,但是我們並不因此而沮喪,因為寫程式就是一個不斷追求完美的過程。
自定義分析器 :
- Character filters :
1. 作用 : 字元的增、刪、改轉換
2. 數量限制 : 可以有0個或多個
3. 內建字元過濾器 :
1. HTML Strip Character filter : 去除html標籤
2. Mapping Character filter : 對映替換
3. Pattern Replace Character filter : 正則替換 - Tokenizer :
1. 作用 :
1. 分詞
2. 記錄詞的順序和位置(短語查詢)
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 - Token filters :
1. 作用 : 分詞的增、刪、改轉換
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
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
}, ......