目录
1.1、Analysis(分词) 和 Analyzer(分词器)
1.2.1、Character Filters - 字符过滤器
一、概念
1.1、Analysis(分词) 和 Analyzer(分词器)
Analysis
: 文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词。Analysis是通过Analyzer来实现的。
当一个文档被索引时,每个Field都可能会创建一个倒排索引(Mapping可以设置不索引该Field)。
倒排索引的过程就是将文档通过Analyzer分成一个一个的Term,每一个Term都指向包含这个Term的文档集合。
当查询query时,Elasticsearch会根据搜索类型决定是否对query进行analyze,然后和倒排索引中的term进行相关性查询,匹配相应的文档。
1.2 、Analyzer组成
分析器(analyzer)都由三种构件块组成的:character filters
, tokenizers
, token filters
。
- Character Filters - 字符过滤器,针对原始文本进行处理,如去除html。
- Tokenizer - 分词器,按照规则切分为单词,比如空格。
- Token Filter - 特征过滤器,将切分的单词进行加工。例如:转小写、删除stopwords,增加同义词等。
三者顺序
:Character Filters--->Tokenizer--->Token Filter
三者个数
:analyzer = CharFilters(0个或多个) + Tokenizer(恰好一个) + TokenFilters(0个或多个)
例如,Mastering Elasticsearch
& Elasticsearch in Action
,在经过分析器之后,可能会被转换为master / elasticsearch / action
。
1.2.1、Character Filters - 字符过滤器
字符过滤器 用来整理一个尚未被分词的字符串。例如,如果我们的文本是HTML格式的,它会包含像 <p> 或者 <div> 这样的HTML标签,这些标签是我们不想索引的。我们可以使用 html清除 字符过滤器 来移除掉所有的HTML标签,并且像把 Á 转换为相对应的Unicode字符 Á 这样,转换HTML实体。
一个分析器可能有0个或者多个字符过滤器。
Character Filter,常用的字符过滤器包括:
类型 | 作用 |
---|---|
html_strip | 去除html |
mapping | 字符串替换 |
pattern replace | 正则匹配替换 |
测试实例
1、使用Character Filter(
字符过滤器) 中的
html_strip 去除 html标签
# 测试过滤html标签
POST _analyze
{
"tokenizer":"keyword",
"char_filter":["html_strip"],
"text": "<b>hello world</b>"
}
2、使用 Character Filter(
字符过滤器) 中的mapping
#使用char filter进行替换
POST _analyze
{
"tokenizer": "standard",
"char_filter": [
{
"type" : "mapping",
"mappings" : [ "- => _"]
}
],
"text": "123-456, I-test! test-990 650-555-1234"
}
#char filter 替换表情符号
POST _analyze
{
"tokenizer": "standard",
"char_filter": [
{
"type" : "mapping",
"mappings" : [ ":) => happy", ":( => sad"]
}
],
"text": ["I am felling :)", "Feeling :( today"]
}