在mysql中创建数据表格中,会对每个字段进行属性设置,而在ES也有相应的操作—映射;映射是定义一个文档是如何被处理的,这些属性字段是怎样被存储或者检索的,这些都是通过映射来操作的。

  ES包含了很多映射规则,具体的详见官方文档,在第一储存是,ES会去猜测字段的映射规则,当然也可以自己修改字段的映射规则;例如:来查询默认的映射规则,可以看出大致的规律,数字被默认为long类型,字符串被默认为text类型,并且text类型下有一个keyword属性用来进行精确匹配的

es 映射配置文件_分词器


  当然,在实际应用中,肯定还有其他的映射规则,我们可以在储存后进行更改,也可以在存储前提前设置好

创建映射

es 映射配置文件_elasticsearch_02

添加新的字段映射

es 映射配置文件_elasticsearch_03

更新映射

  ES中如果一个属性的字段已存在,则不能更新映射,如果修改已经存在的映射,那么我们之前的检索规则就会失效,所以官方不允许修改映射,如果必须要修改映射,可以通过数据迁移实现,重新创建新的映射规则,然后将数据迁移过去

数据迁移

es 映射配置文件_elasticsearch_04


  

  ES有一个全文检索的核心—分词,它会将一段字符串,分成一个一个的单词,然后利用单词的相关性匹配,最终完成全文检索功能;分词在ES中使用分词器(tokenizer)接收一个字符流,将之分割为独立的tokens(词元),然后进行匹配;ES的分词器有很多,默认的是 “standard”,可以来测试哈,可以看到,中文是一个字一个字的拆分,而英文根据空格拆分,ES的分词器都是来支持英文的,而中文需要额外安装自己的分词器,否则就会向下图一样一个一个的拆分

es 映射配置文件_nginx_05

IK分词器

  IK分词器是比较推荐的一个开源的分词器,安装比较简单,下载和自己安装的ES相同的版本,然后放在ES的plugins目录下解压即可,由于在创建容器时映射的plugins目录,可以直接在宿主机中进行操作

# 下载IK分词器
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.10.1/elasticsearch-analysis-ik-7.10.1.zip
# 解压文件
unzip elasticsearch-analysis-ik-7.10.1.zip
# 进入容器内部查询安装的插件
elasticsearch-plugin list
# 最后记得重启容器

  如果能查询到,说明IK分词器安装好了,接下来测试哈,ik有 “ik_smart” 和 “ik_max_word” 两种常用的分词器

es 映射配置文件_nginx_06


es 映射配置文件_es 映射配置文件_07


  但是IK分词还是不能达到我们预期的期望,比如说它把 “牛逼的” 给拆开了,所以我们可以扩展词库

自定义词库

  添加自定义的词库,首先需要将词库文件,可以是一个txt文本,放在网络上,然后去配置ik分词器,可以使用nginx或者其他的web服务器都可以,推荐使用nginx,由于后面会单独出nginx的文章,在这里先不说nginx的配置
  例如我现在配置好了nginx并且通过网络可以访问到我的词库文件,然后在ik分词器的config目录下,修改IKAnalyzer.cfg.xml,这个文件就是ik的配置;也可以通过一个dic文件去添加分词,在ik的config目录下添加一个后缀名为.dic的文件,将之配置在ik的配置文件中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<entry key="ext_dict">fenci.dic</entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords"></entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<entry key="remote_ext_dict">http://192.168.0.109/images/fenci.txt</entry>
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

  配置完成后,重启ES,等ES启动后就可以测试我们的词库,这两种方式都可以,我建议使用第二种更简单

es 映射配置文件_字段_08