系列课程 ElasticSearch 之第 6 篇 —— 自定义扩展分词文件、文档映射

自定义扩展分词文件

接着上一篇博客讲解。

我们打开下载好的 ik 分词插件的 config 目录,可以看到很多 dic 结尾的文件,用记事本打开,看到很多中文的词汇。

其中,IKAnalyzer.cfg.xml 文件是分词的配置信息。

我们在此目录下创建一个文件夹:customer,在文件夹里创建文件:my_dictionary.dic  文件内容如下:注意,我们不能直接创建文件然后修改文件后缀成 .dic,经过测试,ElasticSearch 无法读取到经过修改的文件格式。我们可以复制 config 目录下的一个 dic 文件,然后修改里面的内容,并且重命名为我们的 my_dictionary.dic

马云
王者荣耀
萨瓦迪卡
流放深圳
洪荒之力

然后修改 IKAnalyzer.cfg.xml 文件如下:

<?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">customer/my_dictionary.dic</entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords"></entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

然后重启 ElasticSearch 服务器,使用 postman 测试一下:

上图说明已经读取到我们的自定义分词文件了。

 

文档映射

ElasticSearch 和关系数据库做对比:索引(index)相当于数据库,类型(type)相当于数据表,映射(Mapping)相当于数据表的表结构。ElasticSearch中的映射(Mapping)用来定义一个文档,可以定义所包含的字段以及字段的类型、分词器及属性等等。

文档映射就是给文档中的字段指定字段类型、分词器。语法:GET /索引/_mapping

 

映射的分类

1、动态映射:在关系数据库中(如mysql),需要事先创建数据库,然后在该数据库实例下创建数据表,然后才能在该数据表中插入数据。而 ElasticSearch 中不需要事先定义映射(Mapping),文档写入ElasticSearch时,会根据文档字段自动识别类型,这种机制称之为动态映射。

2、静态映射:在 ElasticSearch 中也可以事先定义好映射,包含文档的各个字段及其类型等,这种方式称之为静态映射。

 

ElasticSearch 数据类型

1、string 字符串类型。string 类型包含 text 和 keyword。

注意: keyword类型不能分词,text类型可以分词查询。

text:该类型被用来索引长文本,在创建索引前会将这些文本进行分词,转化为词的组合,建立索引;允许 ES 来检索这些词,text 类型不能用来排序和聚合

keyword:该类型不需要进行分词,可以被用来检索过滤、排序和聚合,keyword 类型自读那只能用本身来进行检索(不可用 text 分词后的模糊检索)。

 

2、数值类型:long、integer、short、byte、double、float

日期型:date

布尔型:boolean

二进制型:binary

数组类型:(Array datatype)

 

3、复杂类型

地理位置类型(Geo datatypes)

地理坐标类型(Geo-point datatype):geo_point 用于经纬度坐标

地理形状类型(Geo-Shape datatype):geo_shape 用于类似于多边形的复杂形状

 

4、特定类型(Specialised datatypes)

Pv4 类型(IPv4 datatype):ip 用于IPv4 地址

Completion 类型(Completion datatype):completion 提供自动补全建议

Token count 类型(Token count datatype):token_count 用于统计做子标记的字段的index数目,该值会一直增加,不会因为过滤条件而减少

 

如何在创建文档映射时制定类型?

POST /mytest/user
{
  "user":{
    "properties":{
      "name":{
        "type":"text",
        "analyzer":"ik_smart",
        "search_analyzer":"ik_smart"
      },
      "age":{
        "type":"integer"
      },
      "sign":{
        "type":"text",
        "analyzer":"ik_smart",
        "search_analyzer":"ik_smart"
      }
    }
  }
}

上面我们指定 name 的类型是 text,指定查询的分词器。注意使用的是 POST。

执行结果如下:

 

如何修改文档类型?

1、先删除原来的索引:DELETE /mytest

2、再重新创建,指定新的索引即可。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值