世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
自定义分析器 :
- 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. 记录词的顺序和位置(短语查询)
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 - 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
}, ......