一、中文分词ik
注意Elasticsearch版本要对应ik的版本
安装方式
方式1.开源分词器 Ik 的github:https://github.com/medcl/elasticsearch-analysis-ik
下载后放到plugins文件夹里面
方式 2.使用命令安装,要对应版本,7.14.1是对应es版本,不一样请自行更改
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.1/elasticsearch-analysis-ik-7.14.1.zip
运行结果,重启es生效
2、IK使用
IK有两种颗粒度的拆分:
ik_smart
: 会做最粗粒度的拆分
ik_max_word
: 会将文本做最细粒度的拆分1) ik_smart 拆分
GET /_analyze { "text":"中华人民共和国国徽", "analyzer":"ik_smart" }2)ik_max_word 拆分
GET /_analyze { "text":"中华人民共和国国徽", "analyzer":"ik_max_word" }
二、ES内置分词器
这里讲解下常见的几个分词器:Standard Analyzer、Simple Analyzer、whitespace Analyzer。 1、Standard Analyzer(默认) 1)示例 standard 是默认的分析器。它提供了基于语法的标记化(基于Unicode文本分割算法),适用于大多数语言POST _analyze { "analyzer": "standard", "text": "Like X 国庆放假的" }2)配置 标准分析器接受下列参数: max_token_length : 最大token长度,默认255 stopwords : 预定义的停止词列表,如_english_或 包含停止词列表的数组,默认是 _none_ stopwords_path : 包含停止词的文件路径PUT new_index { "settings": { "analysis": { "analyzer": { "my_english_analyzer": { "type": "standard", #设置分词器为standard "max_token_length": 5, #设置分词最大为5 "stopwords": "_english_" #设置过滤词 } } } } }
2、Simple Analyzer simple 分析器当它遇到只要不是字母的字符,就将文本解析成term,而且所有的term都是小写的。POST _analyze { "analyzer": "simple", "text": "Like X 国庆放假 的" }
3、Whitespace Analyzer
POST _analyze { "analyzer": "whitespace", "text": "Like X 国庆放假 的" }
三、分词器概念1、Analysis 和 Analyzer Analysis: 文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词。Analysis是通过Analyzer来实现的。 当一个文档被索引时,每个Field都可能会创建一个倒排索引(Mapping可以设置不索引该Field)。 倒排索引的过程就是将文档通过Analyzer分成一个一个的Term,每一个Term都指向包含这个Term的文档集合。 当查询query时,Elasticsearch会根据搜索类型决定是否对query进行analyze,然后和倒排索引中的term进行相关性查询,匹配相应的文档。 2 、Analyzer组成 分析器(analyzer)都由三种构件块组成的:character filters , tokenizers , token filters。 1) character filter 字符过滤器在一段文本进行分词之前,先进行预处理,比如说最常见的就是,过滤html标签(<span>hello<span> --> hello),& --> and(I&you --> I and you)
2) tokenizers 分词器 英文分词可以根据空格将单词分开,中文分词比较复杂,可以采用机器学习算法来分词。 3) Token filters Token过滤器 将切分的单词进行加工。大小写转换(例将“Quick”转为小写),去掉词(例如停用词像“a”、“and”、“the”等等),或者增加词(例如同义词像“jump”和“leap”)。 三者顺序:Character Filters--->Tokenizer--->Token Filter 三者个数:analyzer = CharFilters(0个或多个) + Tokenizer(恰好一个) + TokenFilters(0个或多个) 3、Elasticsearch的内置分词器 Standard Analyzer - 默认分词器,按词切分,小写处理 Simple Analyzer - 按照非字母切分(符号被过滤), 小写处理 Stop Analyzer - 小写处理,停用词过滤(the,a,is) Whitespace Analyzer - 按照空格切分,不转小写 Keyword Analyzer - 不分词,直接将输入当作输出 Patter Analyzer - 正则表达式,默认\W+(非字符分割) Language - 提供了30多种常见语言的分词器 Customer Analyzer 自定义分词器 4、创建索引时设置分词器PUT new_index { "settings": { "analysis": { "analyzer": { "std_folded": { "type": "custom", "tokenizer": "standard", "filter": [ "lowercase", "asciifolding" ] } } } }, "mappings": { "properties": { "title": { "type": "text", "analyzer": "std_folded" #指定分词器 }, "content": { "type": "text", "analyzer": "whitespace" #指定分词器 } } } }