1、什么是分析
分析是在文档被发送并加入到倒排索引之前,ES在其主体上进行的操作。
这四个部分组成分析器
- 字符过滤
- 文本切分
- 分词过滤,将分词作为输入根据需要进行修改,添加或删除。这一步可以处理停用词、同义词
- 分词索引
2、为文档使用分析器
在索引创建时增加分析器
图片.png在配置中添加分析器
在映射中指定某个字段的分析器
{
"mappings": {
"document":{
"properties":{
"description":{
"type":"string",
"analyzer":"myCustomAnalyzer"
}
}
}
}
}
3、使用分析API来分析文本
分析API_analyze端点,允许你向ES发送任何文本,指定所使用的分析器、分词器或分词过滤器,然后获取分析后的分词。
4、分析器、分词器和分词过滤器
内置分析器
分析器概览一个分析器包括一个可选的字符过滤器、一个单个分词器、0个或多个分词过滤器1
- 标准分析器
- 简单分析器
- 空白分析器
- 停用词分析器
- 关键词分析器,将整个字段当做一个单独的分词。
- 模式分析器,可指定分词切分模式
- 雪球分析器
分词器
- 标准分词,基于语法的分词器
- 关键词分词,将整个文本作为单个分词
- 字母分词,根据非字母的符号进行切分
- 小写分词,分词同时会转换小写
- 空白分词器
- 模式分词器
curl -XPOST 'localhost:9200/pattern' -d '
{
"settings": {
"index":{
"analysis":{
"tokenizer":{
"pattern1":{
"type":"pattern",
"pattern":"\\.-\\."
}
}
}
}
}
}
分词过滤器
分词过滤器- 标准分词过滤器,其实什么都没过滤
- 小写分词过滤器,转换成小写
- 长度分词过滤器
- 停用词分词过滤器
curl -XPOST 'localhost:9200/stopwords' -d '
{
"settings": {
"index":{
"analysis":{
"analyzer":{
"stop1":{
"type":"custom",
"tokenizer":"standard",
"filter":["my-stop-filter"]
}
},
"filter":{
"my-stop-filter":{
"type":"stop",
"stopwords":["the", "a", "an"]
}
}
}
}
}
}
- 截断分词过滤器、修建分词过滤器
- 颠倒分词过滤器
- 唯一分词过滤器
- 同义词分词过滤器
curl -XPOST 'localhost:9200/syn-test' -d '
{
"settings": {
"index":{
"analysis":{
"analyzer":{
"synoyms":{
"type":"custom",
"tokenizer":"standard",
"filter":["my-synonym-filter"]
}
},
"filter":{
"my-synonym-filter":{
"type":"synonym",
"expand": true,
"synonyms":["automobile" => "car"]
}
}
}
}
}
}
5、N元语法、侧边N元语法和滑动窗口
N元语法过滤器
- spaghe 一元 被分成 s p a g h e
- 二元被分成 sp pa ag gh he
- 三元被分成 spa pag agh ghe
- 当事先不知道何种语言,或者单词结合方式和欧洲语言不通,仍然允许用户对文本进行分析
侧边N元语法过滤器
- 仅仅从前端的边缘开始构建N元语法
- 设置min_gram为2 max_gram为6 就可以分为 sp spa spag spagh spaghe
curl -XPOST 'localhost:9200/ng' -d '
{
"settings": {
"index":{
"analysis":{
"analyzer":{
"ng1":{
"type":"custom",
"tokenizer":"standard",
"filter":["ngf1"]
}
},
"filter":{
"ngf1":{
"type":"edgeNgram",
"min-gram": 2,
"min-gram":6
}
}
}
}
}
}
滑动窗口分词过滤器
字符级别的滑动
foo, bar, baz 就可以分成 foo, foo bar, foo bar baz
6、提取词干
算法提取词干
-
过滤器,snowball过滤器、porter stem过滤器、kstem过滤器
过滤器
网友评论