首页 体育 教育 财经 社会 娱乐 军事 国内 科技 互联网 房产 国际 女人 汽车 游戏

Elasticsearch 分词

2020-01-12

所谓分词便是将一段文本依照语义规矩切分红多个词语,当有一篇文章标题是 “马云说996是福报”时,咱们需要把这段文本切分红多个词语: 996、马云、福报 等。由于用户查找的时分或许只会输入一个词语。

之所以要这样做是为了进步查找的准确度,假如用户查找的时分输入的关键字是 “996”,刚好能匹配到分词短语 996,就能射中该文本。ES 的查找不象 MySQL 那样运用 like 语句履行含糊查找。

查找的质量取决于分词的好坏。例如 996 假如拆分红9和6,用户输入996又匹配不到,输入9或许6 或许又会搜到许多无关紧要的东西。

剖析器的效果对文本进行分词处理。首先将文本拆分,构建倒排索引,然后对分词进行处理进步分词的查找准确率。剖析器包括3个功用

将文档参加索引或许用户查找的时分都会用到剖析器。剖析器有许多种,下面将对常用的剖析器介绍

空格剖析器只适用于英文文本,它依照单词的空格进行切分。由于中文语句是接连的,所以空格剖析器不运用。

POST _analyze
 analyzer : whitespace ,
 text : The quick brown fox. 
 tokens : [
 token : The ,
 start_offset : 0,
 end_offset : 3,
 type : word ,
 position : 0
 token : quick ,
 start_offset : 4,
 end_offset : 9,
 type : word ,
 position : 1
}

规范剖析器是 Elasticsearch 默许运用的剖析器,依据 Unicode 联盟界说的单词鸿沟区分文本,英文依照空格拆分,中文依照单汉字拆分,删去绝大部分标点。

POST _analyze
 analyzer : standard ,
 text : 一切的光鲜,都有加班的滋味 
 tokens : [
 token : 所 ,
 start_offset : 0,
 end_offset : 1,
 type : IDEOGRAPHIC ,
 position : 0
 token : 有 ,
 start_offset : 1,
 end_offset : 2,
 type : IDEOGRAPHIC ,
 position : 1
 token : 的 ,
 start_offset : 2,
 end_offset : 3,
 type : IDEOGRAPHIC ,
 position : 2
 token : 光 ,
 start_offset : 3,
 end_offset : 4,
 type : IDEOGRAPHIC ,
 position : 3
 token : 鲜 ,
 start_offset : 4,
 end_offset : 5,
 type : IDEOGRAPHIC ,
 position : 4
 token : 都 ,
 start_offset : 6,
 end_offset : 7,
 type : IDEOGRAPHIC ,
 position : 5
}

创立索引时可指定剖析器,参加的文档就会依照这个分词器进行分词保存。

PUT /account
 settings : {
 analysis : {
 analyzer : {
 my_english_analyzer : {
 type : standard ,
 max_token_length : 5,
 stopwords : _english_ 
}

关于现已存在的索引,怎么给索引加剖析器呢?

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html

规范剖析器不适用于中文分词,由于中文只要一个个词语安排在一起才有含义,单个汉字没什么含义,一切就有了专业的中文剖析器。

IK 剖析器是一款结合了词典和文法剖析算法的中文分词组件,根据字符串匹配,支撑用户词典扩展界说,支撑细粒度和智能切分。

运用插件指令装置中文分词IK插件,留意挑选ES对应的版别,我这儿挑选的是7.0

sudo ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.0.0/elasticsearch-analysis-ik-7.0.0.zip

IK剖析器的两种剖析器分别叫:ik_smart , ik_max_word

POST /_analyze
 analyzer : ik_smart ,
 text : 996都有加班的滋味 
 tokens : [
 token : 996 ,
 start_offset : 0,
 end_offset : 3,
 type : ARABIC ,
 position : 0
 token : 都有 ,
 start_offset : 3,
 end_offset : 5,
 type : CN_WORD ,
 position : 1
 token : 加班 ,
 start_offset : 5,
 end_offset : 7,
 type : CN_WORD ,
 position : 2
 token : 的 ,
 start_offset : 7,
 end_offset : 8,
 type : CN_CHAR ,
 position : 3
 token : 滋味 ,
 start_offset : 8,
 end_offset : 10,
 type : CN_WORD ,
 position : 4
}

https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis.html

插件地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

https://github.com/medcl/elasticsearch-analysis-ik/blob/master/README.md

有问题能够扫描二维码和我沟通

重视大众号「Python之禅」,回复「1024」免费获取Python资源

热门文章

随机推荐

推荐文章