【Elasticsearch】-文本分析

一、文本分析

analysis(只是一个概念),文本分析是将全文本转换为一系列单词的过程,也叫分词。analysis是通过analyzer分词器来实现的,可以使用Elasticsearch内置的分词器,也可以自己去制定一些分词器。除了在数据写入的时候将词条进行转换,在查询的时候也可以指定分词器对语句进行分析。

analyzer由三部分组成。例如有

Hello a world ,the world is beautiful

:

  1. Character Filter :将文本中的html标签剔除掉。
  2. Tokenizer:按照规则进行分词,在英文中按照空格分词
  3. Token Filter: 去掉stop world(停顿词,a,an,the,is,are等),然后转换为小写

内置分词器

【Elasticsearch】-文本分析

GET _analyze

{

  "analyzer": "standard",

  "text": "hello a  world"

}

(一)分词器的安装

1.1 IK分词器

1.1.1下载

下载地址 https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.11.2

1.1.2安装

下载后是个zip包,上传到/usr/local/elasticsearch-7.11.2/plugins目录

#解压文件到ik文件夹

unzip elasticsearch-analysis-ik-7.11.2.zip -d ik

#重新修改文件的拥有者

chown -R  es  elasticsearch-7.11.2

#重新启动es

./bin/elasticsearch -d -p pid

1.1.3分词方式

ik分词器提供了两种分词方式

分词器名称

说明

ik_smart

会做最粗粒度的拆分,比如会将“*国歌”拆分为“*”,“国歌”,适合phrase查询

ik_max_word

会将文本做最细粒度的拆分,比如会将“*国歌”拆分为“*、中华人民、中华、华人、人民*、人民、人、*、共和、国歌”,会穷尽各种可能组合,适合Term Query

GET _analyze

{

  "analyzer": "ik_max_word",

  "text": "河南省郑州市"

}


【Elasticsearch】-文本分析

1.1.4自定义词库

在很多时候,业务上的一些词库极有可能不再IK分词器的词库中,需要去定制属于我们自己的词库。特别是在一些行业领域,比如银行、金融、电力行业都有自己的特殊词库。比如下面的例子中,电能表、计量点点被切分为一个个的字,我们希望这两个词语不是被拆分;另外的作为中文的停顿词,也不希望出现在分词中,所以我们需要自定义词库和停顿词词库。

进入到$ES_HOME/plugins/ik/config目录下,创建custom目录,在目录下创建mydic.dic、ext_stopword.dic文件。

在文件中增加词条,如下图所示

【Elasticsearch】-文本分析【Elasticsearch】-文本分析

修改IKAnalyzer.cfg.xml文件,把我们新增加的文件路径配置如下

【Elasticsearch】-文本分析

查看配置过词条的结果,电能表和计量点不会再次被拆分

【Elasticsearch】-文本分析

(二)分词器应用

2.1 新建索引

指定字段的被索引的分词器、查询时解析字段的分词器,并把自定义分词

PUT news

{"mappings": {

  "properties": {

    "title":{

      "type": "text",

      "analyzer": "ik_max_word",

      "search_analyzer": "ik_smart"

      },

      "content":{

        "type": "text",

        "analyzer": "ik_max_word",

        "search_analyzer": "ik_smart"

      }

    }

  }

}

2.2动态修改索引数据

数据如果被索引以后,再动态增加自定义词条,检索临时增加的动态词条不生效,需要删除数据重新索引数据或动态修改索引数据。当需要索引的数据量较小时可以采用第一种方式,当数据量很大时,采用动态索引方式较好。

POST news/_update_by_query

{

 "query":{

  

  }

}

2.3动态增加自定义词条

动态增加自定义词条的原理是配置远程的扩展字典文件,修改远程的扩展字典文件达到动态增加自定义词条的目的。

【Elasticsearch】-文本分析

我们借助nginx服务器,在nginx服务器上部署一个txt文档,文档部署成功后,在上述文件设置远程扩展地址URL

【Elasticsearch】-文本分析

然后重启es服务,后续如果新增加自定义词条,可以修改此文件可以实现动态增加。

上一篇:【Elasticsearch】-聚合查询


下一篇:elastic基础知识