elasticsearch中的mapping简介---转载

原址https://www.cnblogs.com/xiaozengzeng/p/12359311.html

默认mapping
ES能非常聪明的识别出"name"和"description"字段的类型是string, ES默认会创建以下的mapping。

mappings: {
item: { 
properties: {
description: {
type: string
}
name: {
type: string
}
}
}}


mapping参数
字段中的type(es数据类型)
1.text 字符串,分词,全文索引

2.keyword 关键字,不分词,适合id,email等这种不分词的字段

3.numeric 数字类型有integer、long、short、byte、double、float等类型

4.date 时间类型

5.boolean 布尔类型

6.binary 接收base64编码的字符串

7.rang 具体有integer_range,float_range,long_range,double_range,date_range,ip_range,可存储范围数据,如下插入


什么是mapping

ES的mapping非常类似于静态语言中的数据类型:声明一个变量为int类型的变量, 以后这个变量都只能存储int类型的数据。同样的, 一个number类型的mapping字段只能存储number类型的数据。

同语言的数据类型相比,mapping还有一些其他的含义,mapping不仅告诉ES一个field中是什么类型的值, 它还告诉ES如何索引数据以及数据是否能被搜索到。

当你的查询没有返回相应的数据, 你的mapping很有可能有问题。当你拿不准的时候, 直接检查你的mapping。

剖析mapping

一个mapping由一个或多个analyzer组成, 一个analyzer又由一个或多个filter组成的。当ES索引文档的时候,它把字段中的内容传递给相应的analyzer,analyzer再传递给各自的filters。

filter的功能很容易理解:一个filter就是一个转换数据的方法, 输入一个字符串,这个方法返回另一个字符串,比如一个将字符串转为小写的方法就是一个filter很好的例子。

一个analyzer由一组顺序排列的filter组成,执行分析的过程就是按顺序一个filter一个filter依次调用, ES存储和索引最后得到的结果。

总结来说, mapping的作用就是执行一系列的指令将输入的数据转成可搜索的索引项。

对于 String 字段,可以设置类型为 text 或者 keyword。text类型的数据会被分词处理,而 keyword 类型的数据不会被分词处理。因此想根据某个字段精确查询的话,可以将其设置为 keyword 类型(版本5.0之后)。

如果一个索引库已经存在索引文档,这时想要更改索引的mapping的话,最好删除当前索引库,重新建立索引库,设置 mapping 之后,将数据重新添加到索引库中。


默认analyzer

回到我们的例子, ES猜测description字段是string类型,于是默认创建一个string类型的mapping,它使用默认的全局analyzer, 默认的analyzer是标准analyzer, 这个标准analyzer有三个filter:token filter, lowercase filter和stop token filter。

我们可以在做查询的时候键入_analyze关键字查看分析的过程

程序开发机器人 琴酒、灰原哀、刺痛是我心尖尖上的人 最爱琴酒、灰原哀、刺痛
原文地址:https://www.cnblogs.com/doudou0809/p/13998983.html