04.内置analyzer和analyze-API使用

1. 自带的analyzer

  1. standard analyzer: 按照unicode 定义的word boundary进行切分,会移除大部分的标点符号,并且将token转成小写,同时支持自定义一些stop words。
  2. simple analyzer: 遇到不是letter的char就切词,并且将token转化为小写。
  3. whitespace analyzer: 遇到空格时切词,不会进行小写转换
  4. stop analyzer: 在simple analyzer的基础上增加了stop words的功能
  5. keyword analyzer: 会将所有的输入当做一个token输出
  6. pattern analyzer: 使用正则匹配的值作为切分点得到token,支持lowercase convert 和 stop words
  7. language analyzer: es提供了一些语言识别的analyzer
  8. fingerprint analyzer: 会将输入进行lowercase,sorted,deduplicated 然后连接成一个token输出

1. 主要analyzer的解析

1. standard analyzer

按照unicode 定义的word boundary进行切分,会移除大部分的标点符号,并且将token转成小写,同时支持自定义一些stop words。
1.配置信息
max_token_length: token的最大长度,默认为255
stopwords: 停用词,可以引用一些预定义的(比如_english_,参考stop token filter 可以看到这些预定义的信息 这里),也可以直接在这里定一个一个word list. 这里的配置默认为none,就是不进行stop
stopwords_path: 可以引用一个文件中定义的停用词

2.定义analyzer

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_english_analyzer": {
          "type": "standard",
          "max_token_length": 5,
          "stopwords": "_english_"
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_english_analyzer",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

返回
[ 2, quick, brown, foxes, jumpe, d, over, lazy, dog's, bone ]

3.拆解analyzer
standard analyzer的组成是

  1. standard tokenizer
  2. [lowercase-token-filter, stop-token-filter(该filter默认没有启用)]

没有使用char_filter
所以我们也可以借助standard来快速自顶一个standard analyzer

PUT /standard_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "rebuilt_standard": {
          "tokenizer": "standard",
          "filter": [
                   
          ]
        }
      }
    }
  }
}



POST standard_example/_analyze
{
  "analyzer": "rebuilt_standard",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

返回
[The,2,QUICK,Brown-Foxes,jumped,over,the,lazy,dog's,bone]

注意,这里是定义了一个新的analyzer,叫 rebuilt_standard ,原来的standard analyzer并没有被改变。
这里可以看到没有进行小写转换。

2. simple analyzer

遇到不是letter的char就切词,并且将token转化为小写。

1.配置信息

2.定义analyzer
以为没有配置,所以不需要设置
3.拆解,重组analyzer

  1. lowercase-tokenizer ,只有这一个tokenizer,别的没有
PUT /simple_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "rebuilt_simple": {
          "tokenizer": "lowercase",
          "filter": [         
          ]
        }
      }
    }
  }
}
3. whitespace analyzer

遇到空格时切词,不会进行小写转换

1.配置信息

2.定义analyzer
不需要配置

3.拆解analyzer

  • 只有white-space tokenizer
PUT /whitespace_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "rebuilt_whitespace": {
          "tokenizer": "whitespace",
          "filter": [         
          ]
        }
      }
    }
  }
4. stop analyzer

在simple analyzer的基础上增加了stop words的功能

1.配置信息
stopwords: 和standard analyzer配置一致
stopwords_path: 和standard analyzer 配置一致

2.定义analyzer

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_stop_analyzer": {
          "type": "stop",
          "stopwords": ["the", "over"]
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_stop_analyzer",
  "text": "The 2 QUICK Brown-Foxes jumped over the lazy dog's bone."
}

3.拆解analyzer

lowercase-tokenizer
stop-token-filter

PUT /stop_example
{
  "settings": {
    "analysis": {
      "filter": {
        "english_stop": {
          "type":       "stop",
          "stopwords":  "_english_" 
        }
      },
      "analyzer": {
        "rebuilt_stop": {
          "tokenizer": "lowercase",
          "filter": [
            "english_stop"          
          ]
        }
      }
    }
  }
}
5. keyword analyzer: 会将所有的输入当做一个token输出

1.配置信息

2.定义analyzer
不需要
3.拆解analyzer
只有 Keyword Tokenizer

PUT /keyword_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "rebuilt_keyword": {
          "tokenizer": "keyword",
          "filter": [         
          ]
        }
      }
    }
  }
}

6. pattern analyzer

使用正则匹配的值作为切分点得到token,支持lowercase convert 和 stop words

1.配置信息
pattern
flags
lowercase
stopwords
stopwords_path

2.定义analyzer

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_email_analyzer": {
          "type":      "pattern",
          "pattern":   "\\W|_", 
          "lowercase": true
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_email_analyzer",
  "text": "John_Smith@foo-bar.com"
}

返回
[ john, smith, foo, bar, com ]

3.拆解analyzer
Pattern Tokenizer
Lower Case Token Filter,Stop Token Filter(默认没有开启)

PUT /pattern_example
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "split_on_non_word": {
          "type":       "pattern",
          "pattern":    "\\W+" 
        }
      },
      "analyzer": {
        "rebuilt_pattern": {
          "tokenizer": "split_on_non_word",
          "filter": [
            "lowercase"       
          ]
        }
      }
    }
  }
}
7. language analyzer: es提供了一些语言识别的analyzer

不看了,这个感觉暂时用不上,也不会其他的外语,不好测试😂
1.配置信息
2.定义analyzer
3.拆解analyzer

8. fingerprint analyzer

会将输入进行lowercase,sorted,deduplicated 然后连接成一个token输出

1.配置信息
separator:连接term使用的字符,默认是space
max_output_size:产生的token的最大长度,默认255
stopwords: 和standard analyzer配置一致
stopwords_path: 和standard analyzer 配置一致

2.定义analyzer

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_fingerprint_analyzer": {
          "type": "fingerprint",
          "stopwords": "_english_"
        }
      }
    }
  }
}

POST my_index/_analyze
{
  "analyzer": "my_fingerprint_analyzer",
  "text": "Yes yes, Gödel said this sentence is consistent and."
}
返回

[ consistent godel said sentence yes ]


上面返回的结果中间没有逗号哦,是一个词。

3.拆解analyzer
Standard Tokenizer
下面的都是token filter
Lower Case Token Filter
ASCII folding
Stop Token Filter
Fingerprint

https://unicode.org/reports/tr29/#Word_Boundaries

2. analyze API使用

测试analyze API可以使用下面四种方式

GET /_analyze

POST /_analyze

GET /<index>/_analyze

POST /<index>/_analyze

在传入参数的时候,可以直接使用analyzer进行使用,也可以使用 char_filter, filter, tokenizer来进行analyze的测试和使用
在测试的时候,当使用分解的组件进行测试的时候,准寻上面介绍analyzer的结构介绍,tokenizer 是必须品,其他的都是可有可无的。

POST _analyze
{
  "analyzer": "whitespace",
  "text":     "The quick brown fox."
}

POST _analyze
{
  "tokenizer":      "keyword",
  "char_filter":  [ "html_strip" ],
  "text": "<p>I&apos;m so <b>happy</b>!</p>"
}

POST _analyze
{
  "tokenizer": "standard",
  "filter":  [ "lowercase", "asciifolding" ],
  "text":      "Is this déja vu?"
}

3. 自定义一个analyzer


PUT analyze_test
{
  "settings": {
    "analysis": {
      "analyzer":{
        "my_analyzer":{
          "tokenizer":"standard",
          "char_filter":["my_char_filter","html_strip"],  #过滤html,增加映射
          "filter":["my_stem_filter"]  # 词干提取
        }
      },
      "char_filter": {
        "my_char_filter":{
          "type":"mapping",
          "mappings":[
            "a => b",
            "c => d"
            ]
        }
      },
      "filter": {
        "my_stem_filter":{
          "type":"stemmer",
          "name":"english"
        }
      }
    }
  }
}

GET analyze_test/_analyze
{
  "analyzer": "my_analyzer",
  "text":["<div>aa</div>i want to going shoping"]
}

返回
["bb"," i"," wbnt"," to"," go"," shope"]

待补充

4. 实际业务场景实现

待补充
测试一下char_filter导致原来的text长度发生变化进而影响了高亮问题的情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值