分词器工作流程

1.切分词语,根据你指定好的分词器去进行切分
2.normalization ,就是让词语更加保准话正规,也就是说你切分的词语可能会有那些语气词,比如说呢 的 啊 这些词不需要,那你ElasticSearch就得去掉这些语气词.还有就是大小写转换,同义词处理这些事情都是由normalization来处理.

给你一段句子,然后将这段句子拆分成一个一个的单个的单词,同时对每个单词进行normalization(时态转换,单复数转换),分词器
recall,召回率:搜索的时候,增加能够搜索到的结果的数量

分词器处理过程:

1.character filter:在一段文本进行分词之前,先进行预处理,比如说最常见的就是,过滤html标签(hello —> hello),& —> and(I&you —> I and you)
2.tokenizer:分词,hello you and me —> hello, you, and, me
3.token filter:lowercase,stop word(停用词处理),synonymom(同义词处理),liked —> like,Tom —> tom,a/the/an —> 干掉,small —> little

一个分词器,很重要,将一段文本进行各种处理,最后处理好的结果才会拿去建立倒排索引

内置分词器的介绍

Set the shape to semi-transparent by calling set_trans(5)

standard analyzer:set, the, shape, to, semi, transparent, by, calling, set_trans, 5(默认的是standard)

simple analyzer:set, the, shape, to, semi, transparent, by, calling, set, trans

whitespace analyzer:Set, the, shape, to, semi-transparent, by, calling, set_trans(5)

stop analyzer:移除停用词,比如a the it等等

测试:
POST _analyze
{
“analyzer”:”standard”,
“text”:”Set the shape to semi-transparent by calling set_trans(5)”
}

定制分词器

1)默认的分词器
standard
standard tokenizer:以单词边界进行切分
standard token filter:什么都不做
lowercase token filter:将所有字母转换为小写
stop token filer(默认被禁用):移除停用词,比如a the it等等

2)修改分词器的设置 (了解)
启用english停用词token filter

下面的意思是给分词器起了个名字叫es_std,中括号里面的意思是给这个分词器改造

  1. PUT /my_index
  2. {
  3. "settings": {
  4. "analysis": {
  5. "analyzer": {
  6. "es_std": {
  7. "type": "standard",
  8. "stopwords": "_english_"
  9. }
  10. }
  11. }
  12. }
  13. }
  1. // "analyzer": "standard"的意思是: standard分词器
  2. GET /my_index/_analyze
  3. {
  4. "analyzer": "standard",
  5. "text": "a dog is in the house"
  6. }
  7. //"analyzer": "es_std"的意思是: es_std分词器
  8. GET /my_index/_analyze
  9. {
  10. "analyzer": "es_std",
  11. "text":"a dog is in the house"
  12. }

将特殊的字符串进行转换

  1. PUT /my_index
  2. {
  3. "settings": {
  4. "analysis": {
  5. "char_filter": {
  6. "&_to_and": { //这个名字你可以自己改的,类似于你自己取得一个别名
  7. "type": "mapping", // 映射关系
  8. "mappings": [ // 这个是数组,多个用逗号隔开
  9. "&=> and" //将&替换成 and
  10. ]
  11. }
  12. },
  13. "filter": { // 停用词的处理
  14. "my_stopwords": { // 自己命名好的名字
  15. "type": "stop",
  16. "stopwords": [ //添加停用词
  17. "the",
  18. "a"
  19. ]
  20. }
  21. },
  22. "analyzer": {
  23. "my_analyzer": { //自定义分词器名字
  24. "type": "custom", //custom代表自定义分词器名字,"type": "custom"不能随便写
  25. "char_filter": [ //
  26. "html_strip", //es自带的,假如说内容用html标签,就自动过滤掉
  27. "&_to_and" // 这个是你刚刚上面在声明好的
  28. ],
  29. "tokenizer": "standard",//意思是在standard分词器的基础之上进行扩展
  30. "filter": [ //过滤
  31. "lowercase", //大小写转换
  32. "my_stopwords" //你自己自定义filter的名字
  33. ]
  34. }
  35. }
  36. }
  37. }
  38. }
  39. // 测试上面分词器带效果
  40. GET /my_index/_analyze
  41. {
  42. "text": "tom&jerry are a friend in the house, <a>, HAHA!!",
  43. "analyzer": "my_analyzer"
  44. }
  45. PUT /my_index/_mapping/my_type
  46. {
  47. "properties": {
  48. "content": {
  49. "type": "text",
  50. "analyzer": "my_analyzer"
  51. }
  52. }
  53. }