Elastic Stack 笔记(五)Elasticsearch5.6 Mappings 映射
一、前言
关系型数据库对我们来说都很熟悉,Elasticsearch 也可以看成是一种数据库,所以我们经常将关系型数据库中的概念和 Elasticsearch 中的概念进行对比,如下:
Relational DB(关系型数据库) -> Databases(数据库) -> Tables(表) -> Rows(行) -> Columns(列)
Elasticsearch -> Indices(索引) -> Types(类型) -> Documents(文档) -> Fields(域/字段)
如上所示,Elasticsearch 中的 index(索引)就相当于数据库,type(类型)相当于表,mapping(映射)相当于表结构,document(文档)相当于行等等。
但是 Elasticsearch 也有自己的特点:
Elasticsearch 没有典型意义的事务;
Elasticsearch 是一种面向文档的数据库;
Elasticsearch 没有提供授权和认证特性。
二、映射
为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成全文本(Full-text)或精确(Exact-value)的字符串值,Elasticsearch 需要知道每个字段里面都包含什么数据类型。这些类型和字段的信息存储在映射中。创建索引的时候,可以预先定义字段的类型以及相关属性,相当于定义数据库字段的属性。以下参考文档地址均来自官方最新版本 6.2。
Elasticsearch 官网文档地址:Elasticsearch Reference
2.1 字段数据类型
字段数据类型文档地址:Field datatypes
核心类型 Core datatypes
字符串类型
string
text and keyword
text:全文检索需要分词的类型。
keyword:精确值。合适分组排序。不进行分词,只能通过精确值搜索到,支持模糊、精确查询,支持聚合等。
Elasticsearch 1.x 和 2.x 中是 string 类型,5.x 之后,分解为 text 和 keyword。
数字类型
long, integer, short, byte, double, float, half_float, scaled_float
日期类型
date
JSON 中没有日期类型,所以在 ELasticsearch 中,日期类型可以是以下几种:
日期格式的字符串:e.g. "2015-01-01" or "2015/01/01 12:10:30".
long类型的毫秒数( milliseconds-since-the-epoch)
integer的秒数(seconds-since-the-epoch)
日期格式可以自定义,如果没有自定义,默认格式如下:
"strict_date_optional_time||epoch_millis"
布尔类型
boolean
true 和 false
二进制类型
binary
范围类型
integer_range, float_range, long_range, double_range, date_range
复杂数据类型 Complex datatypes
数组类型
Array support does not require a dedicated type
数组支持不需要专用类型
对象类型
object for single JSON objects
单个JSON对象的对象
嵌套类型
nested for arrays of JSON objects
嵌套用于JSON对象数组
地理数据类型 Geo datatypes
地理坐标点类型
geo_point for lat/lon points
用于经纬度坐标点
地理形状类型
geo_shape for complex shapes like polygons
用于复杂的形状,比如多边形
专业数据类型 specialised datatypes
IP 地址数据类型
ip for IPv4 and IPv6 addresses
完成数据类型
completion to provide auto-complete suggestions
completion 提供自动补全建议。
令牌计数数据类型
token_count to count the number of tokens in a string
murmur3 插件类型
murmur3 to compute hashes of values at index-time and store them in the index
通过插件,可以通过 murmur3 来计算 index 的 hash 值。
过滤器类型
Accepts queries from the query-dsl
连接数据类型
Defines parent/child relation for documents within the same index
多字段类型
It is often useful to index the same field in different ways for different purposes. For instance, a string field could be mapped as a text field for full-text search, and as a keyword field for sorting or aggregations. Alternatively, you could index a text field with the standard analyzer, the english analyzer, and the french analyzer.
This is the purpose of multi-fields. Most datatypes support multi-fields via the fields parameter.
2.2 元字段
元字段是映射中描述文档本身的字段,从大的分类上来看,主要有文档属性的元字段、源文档的元字段、索引的元字段、路由的元字段和自定义元字段。
元字段文档地址:Meta-Fields
元字段用于定制文档的相关元数据。元字段的示例包括文档的_index,_type,_id 和 _source 字段。
文档属性的元字段 identity_meta_fields
The index to which the document belongs.
索引标识。
A composite field consisting of the _type and the _id.
由_type和_id组成的复合字段。
The document’s mapping type.
文档的类型。
The document’s ID.
文档的id。
源文档的元字段 Document source meta-fields
The original JSON representing the body of the document.
文档的原始 JSON 字符串。
The size of the _source
field in bytes, provided by the mapper-size
plugin.
_source 字段的大小。
索引的元字段 Indexing meta-fieldsedit
A catch-all field that indexes the values of all other fields. Disabled by default.
包含索引全部字段的超级字段。
_all 字段是把其他字段拼接在一起的超级字段,所有的字段内容用空格分开,_all 字段会被解析和索引,但是不存储。
All fields in the document which contain non-null values.
文档中包含非空值的所有字段。
路由元字段 Routing meta-fieldedit
A custom routing value which routes a document to a particular shard.
将文档路由到特定分片的自定义路由值。
其他元字段 Other meta-fieldedit
Application specific metadata.
应用程序特定的元字段,通常用于自定义元字段。
2.3 映射参数
Elasticsearch 提供了足够多的映射参数对字段的映射进行参数设置,一些常用功能的实现,比如字段的分词器,字段的权重、日期格式、检索模型的选择等都是通过映射参数来配置完成的。
映射参数文档地址:Mapping parameters
analyzer
normalizer
boost
coerce
copy_to
doc_values
dynamic
enabled
fielddata
eager_global_ordinals
format
ignore_above
ignore_malformed
index_options
index
fields
norms
null_value
position_increment_gap
properties
search_analyzer
similarity
store
term_vector
以映射参数 analyzer 为例,在创建索引时指定分词器,如下:
PUT forum
{
"mappings": {
"article": {
"properties": {
"id": {
"type": "text"
},
"title": {
"type": "text"
},
"postdate": {
"type": "date"
},
"content": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
}
analyzer 指定文本字段的分词器,对索引和分词都有效,默认使用标准分词器,可以指定第三方分词器,比如 IK 分词器,如 ik_smart 将使用智能分词,属于粗粒度分词,ik_max_word 是最细粒度分词。
以映射参数 index 为例,index 属性指定字段是否参与索引,不索引也就不可搜索,取值可以为 true 或者 false。
Elasticsearch 1.x 和 2.x 之前版本 "index":"not_analyzed",表示不分词,在版本 5.x 中提示已经废弃了 "not_analyzed",只能是 true 或 false。5.x 中 string 分为两种类型 keyword,text。如果不想分词,用 keyword 即可,"the keyword field for not_analyzed exact string values"。
使用如下 API 查询分词结果
GET _analyze
{
"analyzer": "ik_max_word",
"text": "中国人"
}
返回结果如下:
{
"tokens": [
{
"token": "中国人",
"start_offset": 0,
"end_offset": 3,
"type": "CN_WORD",
"position": 0
},
{
"token": "中国",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 1
},
{
"token": "国人",
"start_offset": 1,
"end_offset": 3,
"type": "CN_WORD",
"position": 2
},
{
"token": "人",
"start_offset": 2,
"end_offset": 3,
"type": "CN_WORD",
"position": 3
}
]
}
Elastic Stack 笔记(五)Elasticsearch5.6 Mappings 映射的更多相关文章
- Elastic Stack 笔记(四)Elasticsearch5.6 索引及文档管理
博客地址:http://www.moonxy.com 一.前言 在 Elasticsearch 中,对文档进行索引等操作时,既可以通过 RESTful 接口进行操作,也可以通过 Java 也可以通过 ...
- Elastic Stack 笔记(一)CentOS7.5 搭建 Elasticsearch5.6 集群
博客地址:http://www.moonxy.com 一.前言 Elasticsearch 是一个基于 Lucene 的分布式搜索引擎服务,采用 Java 语言编写,使用 Lucene 构建索引.提供 ...
- Elastic Stack 笔记(八)Elasticsearch5.6 Java API
博客地址:http://www.moonxy.com 一.前言 Elasticsearch 底层依赖于 Lucene 库,而 Lucene 库完全是 Java 编写的,前面的文章都是发送的 RESTf ...
- Elastic Stack 笔记(三)Kibana5.6 安装
博客地址:http://www.moonxy.com 一.前言 Kibana 是 Elastic Stack 公司推出的一个针对 Elasticsearch 的开源分析及可视化平台,可以搜索.查看存放 ...
- Elastic Stack 笔记(十)Elasticsearch5.6 For Hadoop
博客地址:http://www.moonxy.com 一.前言 ES-Hadoop 是连接快速查询和大数据分析的桥梁,它能够无间隙的在 Hadoop 和 ElasticSearch 上移动数据.ES ...
- Elastic Stack 笔记(六)Elasticsearch5.6 搜索详解
博客地址:http://www.moonxy.com 一.前言 Elasticsearch 主要包含索引过程和搜索过程. 索引过程:一条文档被索引到 Elasticsearch 之后,默认情况下 ES ...
- Elastic Stack 笔记(九)Elasticsearch5.6 集群管理
博客地址:http://www.moonxy.com 一.前言 集群搭建好以后,在日常中就要对集群的使用情况进行监控,对于一个多节点集群,由于网络连接问题,出现宕机.脑裂等异常情况都是有可能发生的.E ...
- Elastic Stack 笔记(二)Elasticsearch5.6 安装 IK 分词器和 Head 插件
博客地址:http://www.moonxy.com 一.前言 Elasticsearch 作为开源搜索引擎服务器,其核心功能在于索引和搜索数据.索引是把文档写入 Elasticsearch 的过程, ...
- Elastic Stack 笔记(七)Elasticsearch5.6 聚合分析
博客地址:http://www.moonxy.com 一.前言 Elasticsearch 是一个分布式的全文搜索引擎,索引和搜索是 Elasticsarch 的基本功能.同时,Elasticsear ...
随机推荐
- #348 大陆争霸(DIjkstra)
在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光明和永恒的神斯普林·布拉 ...
- Selenium + python 测试环境搭建扩展-HTMLUNIT的使用
尝试给公司的网站写每日例行检查的脚本时,不需要去打开浏览器,这是就用到HTMLUNIT的使用 HTMLUNIT是基于Selenium服务端的,所以需要selenium-server-standalon ...
- 【在 Nervos CKB 上做开发】Nervos CKB脚本编程简介[2]:脚本基础
CKB脚本编程简介[2]:脚本基础 原文作者:Xuejie 原文链接:Introduction to CKB Script Programming 2: Script 本文译者:Shooter,Jas ...
- 人脸识别Demo
★.本实例使用百度智能云-人工智能-人脸识别API实现. ★.楼下安装了刷脸进门.闲暇时无聊写了个Demo 主界面显示如下图: 本实例,包括了所有人脸识别API的调用. 1. 创建楼号,对应API中创 ...
- .NET平台下,钉钉微应用开发之:工作消息通知
首先看下官方文档,为我们提供了POST请求地址,和几个必传参数的列表以及参数示例,写的都挺详细的. 无奈提供的SDK请求示例是JAVA的,而我用的是.NET的,所以还是摸了一些坑出来,其实也就是不同平 ...
- .NET CORE下最快比较两个文件内容是否相同的方法 - 续
.NET CORE下最快比较两个文件内容是否相同的方法 - 续 在上一篇博文中, 我使用了几种方法试图找到哪个是.NET CORE下最快比较两个文件的方法.文章发布后,引起了很多博友的讨论, 在此我对 ...
- 使用Docker快速部署ELK分析Nginx日志实践(二)
Kibana汉化使用中文界面实践 一.背景 笔者在上一篇文章使用Docker快速部署ELK分析Nginx日志实践当中有提到如何快速搭建ELK分析Nginx日志,但是这只是第一步,后面还有很多仪表盘需要 ...
- Spring中老生常谈的FactoryBean
本文完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/factorybean Factory ...
- Android Studio安卓学习笔记(一)安卓与Android Studio运行第一个项目
一:什么是安卓 1.Android是一种基于Linux的自由及开放源代码的操作系统. 2.Android操作系统最初由AndyRubin开发,主要支持手机. 3.Android一词的本义指“机器人”, ...
- 机器学习性能度量指标:ROC曲线、查准率、查全率、F1
错误率 在常见的具体机器学习算法模型中,一般都使用错误率来优化loss function来保证模型达到最优. \[错误率=\frac{分类错误的样本}{样本总数}\] \[error=\frac{1} ...