Elasticsearch---分析(analysis)
ES 的倒排索引即是根据分词后的单词创建,意味着在搜索的时候,匹配分词后的单词才能命中该文档。
一、倒排序简介:
二、用到analysis的地方:
1. 写时分词:发生在写入、更新文档时,由analysis经过分析由Tokens列表,将结果存入倒排索引。
2.读时分词: 发生在用户查询时,输入的关键词进行分词,分词结果只存在内存中。
二、ES分词流程:
Character filter-->>Tokenizer-->>Token filters
分析器(Analyzer)由三部分构成:
- 0个或多个字符过滤器( Character filters)按顺序应用。
- 有且只有一个分词器(Tokenizer)
- 0个或多个过滤器(Token filters),按顺序应用。
1. 字符过滤器( Character filters):
字符过滤器以字符流的形式接收原始文本,并可以通过添加、删除或更改字符来转换该流。
Elasticearch只提供了三种字符过滤器:
- HTML字符过滤器(HTML Strip Char Filter):文本中去除HTML元素。
- 映射字符过滤器(Mapping Char Filter):映射仠替换。("mappings":["苍井空 => 666","武藤兰 => 888"])
- 模式替换过滤器(Pattern Replace Char Filter):正则表达式匹配并替换,小心导致性能变慢
过滤器 | 简称 | 描述 | 支持参数 |
---|---|---|---|
HTML Strip Char Filter | html_strip | 去除HTML元素 | escaped_tags(排除的标签数组) |
Mapping Char Filter | mapping | 根据配置的映射配置 | mappings_path(一个key => value特定格式的文件路径,相对或config文件夹) |
Pattern Replace Char Filter | pattern_replace | 使用java正则替换 | pattern,replacement,flags |
参考详情见:
1. https://www.cnblogs.com/Neeo/articles/10613612.html
2.分词器(Tokenizer):
一个分词器接收一个字符流,并将其拆分成单个token (通常是单个单词),并输出一个token流。
"text": "Is this déja vu?"---->Tokenizer----> tokens[...,...]
token结构:
{
"token":"The", //term分词,用于倒排序。
"start_offset":0, // 所有的字符串位置信息,高亮时用到。
"end_offset":3,
"type":"word",
"position":0