Elasticsearch 索引的映射配置详解

本文共1540字,阅读大约需要 5分钟!

概 述

Elasticsearch 与传统的 SQL数据库的一个明显的不同点是,Elasticsearch 是一个非结构化的数据库,或者说是一个无模式的数据库。Elasticsearch 中数据最重要的三要素当属:索引类型文档,其中索引这个概念非常重要,我们可以粗略地将其类比到传统SQL数据库中的数据表。本文就从 Elasticsearch 的索引映射如何配置开始讲起。

注:本文首发于 My 公众号CodeSheep,可长按扫描下面的小心心来订阅 ↓ ↓ ↓

本文内容脑图如下:

索引模式映射

创建索引时,可以自定义索引的结构,比如 创建一个保存用户信息数据的 索引,其典型的结构如下:

:唯一表示符

:姓名

:出生日期

:爱好

为此我们可以创建一个 json 格式的索引模式映射文件:users.json

上面的 json代码意义如下:

创建一个名称为 的Index

里面有一个名称为 的Type

而 有四个field

且每个 field 都有自己的属性定义

然后我们来执行如下命令来新建一个索引:

结果如下,索引 、类型 、以及 四个字段 都已经顺利插入:

关于字段的可选类型,有如下几种:

:字符串

:数字

:日期

:布尔型

:二进制

:IP地址

类型

关于每种类型有哪些属性,可参考官方文档,由于内容太多,此处不再赘述。

分析器的使用

分析器是一种用于分析数据或者按照用户想要的方式处理数据的工具,对于字符串类型的字段,Elasticsearch 允许用户自定义分析器。

先来自定义一个分析器

上述 json代码中,用户定义了一个名为myanalyzer的分析器,该分析器包含一个分词器 + 三个过滤器,分别如下:

分词器:

过滤器:

过滤器:

过滤器: (自定义过滤器,其本质是 )

再来看如何测试和使用自定义的分析器

可以通过类似如下的 Restful接口来测试 analyze API 的工作情况:

可见我们输入的时一行字符串普通 ,而输出为: 和 ,这说明短语 被分成了两个词条,然后全部转为小写,最后做了词干提取的操作,由此证明我们上面自定义的分析器已然生效了!

相似度模型的配置

Elasticsearch 允许为索引模式映射文件中的不同字段指定不同的相似度得分计算模型,其用法例析如下:

上述 json文件中,我们为 字段使用了 这种相似度模型,添加的方法是使用 属性的键值对,这样一来 Elasticsearch 将会为 字段使用 相似度计算模型来计算相似得分。

信息格式的配置

Elasticsearch 支持为每个字段指定信息格式,以满足通过改变字段被索引的方式来提高性能的条件。Elasticsearch 中的信息格式有如下几个:

:默认信息格式,其提供了实时的对存储字段和词向量的压缩

:将 重复值较少字段 的信息列表 编码为词条矩阵,可加快 该字段的查询速度

:该格式在读过程中将词条加载到未经压缩而存在内存的矩阵中,该格式可以提升常用字段的性能,但损耗内存

:该格式将所有的数据写到磁盘,然后需要FST来读取词条和信息列表到内存中

:默认信息格式的扩展,增加了把 写入磁盘的功能。读取时 被读取并存入内存,以便快速检查给定的值是否存在

: 格式的扩展,也加入 的支持

信息格式字段( )可以在任何一个字段上进行设置,配置信息格式的示例如下:

在该例子之中,我们手动配置改变了 字段的信息格式为 ,因此可加快该字段的查询速度。

文档值及其格式的配置

文档值 这个字段属性作用在于:其允许将给定字段的值被写入一个更高内存效率的结构,以便进行更加高效排序搜索。我们通常可以将该属性加在需要进行排序的字段上,这样可以提效

其配置方式是 通过属性 进行,有三种常用的 属性值,其含义从名字中也能猜个大概:

:默认格式,其使用少量的内存但性能也不错

:将数据存入磁盘,几乎无需内存

:将数据存入内存

举个栗子吧:

上述 json配置中,我们给类型 添加了一个 字段,假如我们想对年龄字段进行排序,那么给该字段设置文档值格式的属性是可以提升效率的。

后 记

由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!

如果有兴趣,也可以抽时间看看作者关于容器化、微服务化方面的文章:

作者更多务实、能看懂、可复现的原创文章尽在公众号CodeSheep,欢迎订阅 ⬇️⬇️⬇️

你花了·来阅读

点个再走吧~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180812G13S9W00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券