前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch之mapping介绍

Elasticsearch之mapping介绍

作者头像
丁D
发布2022-08-12 21:36:44
3200
发布2022-08-12 21:36:44
举报
文章被收录于专栏:老铁丁D老铁丁D

学习目标

分析器的组成 内置分析器 什么是mapping 手动创建mapping mapping复合数据类型

参考Elasticsearch权威指南

分析器的组成

代码语言:javascript
复制
分析器(analyzer)就是将一句话切分成各个词语,同时也可能对单词就行时态转化,单复数转化等,方便es建立倒排索引,主要由字符过滤器、分词器、标记过滤组成。 
字符过滤器(character filter)主要是在分词之前对句子进行预处理,比如将html过滤掉,将&转成and 
分词器(tokenizer)被标记化成独立的词。一个简单的分词器可以根据空格或逗号将单词分开(中文不适用) 
标记过滤(token filters),主要将大写转小写,去掉 a,the an 这种没有意义的停用词,同义词转化等。 

内置分析器

代码语言:javascript
复制
es提供了一些内建分析器。 
"Set the shape to semi-transparent by calling set_trans(5)" 
// 
标准分析器(standard):是es默认的分析器,如果没有特殊要求,是任何语言最佳的选择。 
set, the, shape, to, semi, transparent, by, calling, set_trans, 5 
// 
简单分析器(simple):非单个字母的文本切分,然后把每个词转为小写 
set, the, shape, to, semi, transparent, by, calling, set, trans 
// 
空格分析器(whitespace):简单的根据空格拆分 
Set, the, shape, to, semi-transparent, by, calling, set_trans(5) 
语言分析器:特定语言分析器适用于很多语言,例如,english分析器 
当我们对文档新增新的字符串字段,它将自动设置它为全文string字段并用standard分析器分析,当然我们通常都需要设置,所以我们需要人工设置映射(mapping)来改变这些字段。 

什么是mapping

代码语言:javascript
复制
映射(mapping)就是确认字段数据类型,数据类型不一样,分词的结果可能就不一样,可以理解成传统数据库的模式定义。 
es支持下面这些字段 
string、byte、short、integer、long、float、double、boolean、date 

JSON type

Field type

true or false

boolean

123

long

“123”

string

123.45

double

2014-09-15

date

“foo bar”

string

手动创建mapping

代码语言:javascript
复制
查询映射 
格式:GET /index/_mapping/type 
如:GET /test_index/_mapping/test_type 
指定数据类型 
{ 
"number_of_clicks": { 
"type": "integer" 
} 
} 
映射中最重要的字段参数是type,用它来指定数据类型,但是通常我们使用string会比较多, 
对于string类型还有两个重要的映射参数是index和analyer。 
index的值可以是 analyzed、not_analyzed、no,介绍见下面表格 
analyer的值可以是 whitespace、simple或english 默认是standard 
{ 
"tag": { 
"type": "string", 
"index": "not_analyzed" 
} 
} 

解释

analyzed

首先分析这个字符串,然后索引。换言之,以全文形式索引此字段。

not_analyzed

索引这个字段,使之可以被搜索,但是索引内容和指定值一样。不分析此字段。

no

不索引这个字段。这个字段不能为搜索到

注意 其他简单类型(long、double、date等等)也接受index参数,但相应的值只能是no和not_analyzed,它们的值不能被分析。 重要 如果一个字段的映射已经存在,我们不能修改它,所以就必须在创建索引的时候就确定了,但是我们可以新增一个新字段和新字段的mapping

代码语言:javascript
复制
新增一个index,并指定各个字段的mapping 
PUT /gb 
{ 
"mappings": { 
"tweet" : { 
"properties" : { 
"tweet" : { 
"type" : "string", 
"analyzer": "english" 
}, 
"date" : { 
"type" : "date" 
}, 
"name" : { 
"type" : "string" 
}, 
"user_id" : { 
"type" : "long" 
} 
} 
} 
} 
} 
对一个已经存在的index,新增字段的mapping 
PUT /gb/_mapping/tweet 
{ 
"properties" : { 
"tag" : { 
"type" : "string", 
"index": "not_analyzed" 
} 
} 
} 

mapping复合数据类型

代码语言:javascript
复制
空字段:空字段没有任何意义,所以将会被识别为空字段而不被索引 
"empty_string": "", 
"null_value": null, 
"empty_array": [], 
"array_with_null_value": [ null ] 
数组 
{ "tag": [ "search", "nosql" ]} 
数组每个值他的类型必须一样。 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档