- 分词器
(1) 概念:
(2) 干啥的:
① 切词
② normalization(提升recall召回率:能搜索到的结果的比率)
(3) 分析器:
① character filter(mapping):分词之前预处理(过滤无用字符、标签等,转换一些&=>and 《Elasticsearch》=> Elasticsearch
- HTML Strip Character Filter:html_strip
a. 参数:escaped_tags 需要保留的html标签 - Mapping Character Filter:type mapping
- Pattern Replace Character Filter:type pattern_replace
② tokenizer(分词器):分词
③ token filter:停用词、时态转换、大小写转换、同义词转换、语气词处理等。比如:has=>have him=>he apples=>apple the/oh/a=>干掉
(4) ES内置分词器 7.6 15种 自带分词器
① standard analyzer:默认分词器,中文支持的不理想,会逐字拆分。 - max_token_length:最大令牌长度。如果看到令牌超过此长度,则将其max_token_length间隔分割。默认为255。
② Pattern Tokenizer:以正则匹配分隔符,把文本拆分成若干词项。
③ Simple Pattern Tokenizer:以正则匹配词项,速度比Pattern Tokenizer快。
④ whitespace analyzer:以空白符分隔 Tim_cookie
测试:Tim_cookie received his girlfriend on 2020-05-20
(5) 自定义分词器:
① tokenizer:内置或自定义分词器。(需要)
② char_filter:内置或自定义字符过滤器 。
③ filter:内置或自定义token filter 。
④ position_increment_gap:在为文本值数组建立索引时,Elasticsearch在一个值的最后一项和下一个值的第一项之间插入一个假的“空白”,以确保词组查询与来自不同数组元素的两项不匹配。默认为100。查看position_increment_gap更多。
(6) 中文分词器:
① IK分词:ES的安装目录 不要有中文 空格 - 下载:https://github.com/medcl/elasticsearch-analysis-ik
- 创建插件文件夹 cd your-es-root/plugins/ && mkdir ik
- 将插件解压缩到文件夹 your-es-root/plugins/ik
- 重新启动es
② 两种analyzer - ik_max_word:细粒度
- ik_smart:粗粒度
③ IK文件描述 - IKAnalyzer.cfg.xml:IK分词配置文件
- 主词库:main.dic
- 英文停用词:stopword.dic,不会建立在倒排索引中
- 特殊词库:
a. quantifier.dic:特殊词库:计量单位等
b. suffix.dic:特殊词库:后缀名
c. surname.dic:特殊词库:百家姓
d. preposition:特殊词库:语气词 - 自定义词库:比如当下流行词:857、emmm…、渣女、舔屏、996
- 热更新:
a. 修改ik分词器源码
b. 基于ik分词器原生支持的热更新方案,部署一个web服务器,提供一个http接口,通过modified和tag两个http响应头,来提供词语的热更新
为什么要使用分词器:
这是因为Elasticsearch中默认的分词器,在处理中文的时候会把中文单词切分成一个一个的汉字,因此引入es之中文的分词器插件es-ik就能解决这个问题。
2020.9.3课前复习:
1、logstash如何测试文件是否正常
logstash -f 文件路径 -t
//-t可以检测出来哪里有问题,比直接报错更精简明确
2、输入有几种
stdin{codec => “json/rubydebug” } 标准输入/控制台输入
file{ path=> “” start_position= “beginning” sincedb_path => “/dev/null”}
jdbc{ jar包地址,编码格式,driver,url,user,password }
3、输出有几种
stdout{ codec => “json/rubydebug”}
file{ path => “”}
elasticsearch{ hosts => [""] document_index="" _type="" _id="" }
4、grok过滤器的用法
grok{
match=>{“message”=>"%{内置匹配规则:字段名}"}
或
match=>{“message”=>"(?<字段名>匹配规则)"}
}