Elasticsearch是一个schema-less的系统,但并不代表no shema,而是会尽量根据JSON源数据的基础类型猜测你想要的字段类型映射。
Elasticsearch会根据JSON源数据的基础类型猜测你想要的字段映射。
Mapping就是我们自己定义的字段的数据类型,同时告诉Elasticsearch如何索引数据以及是否可以被搜索。
Elasticsearch可以根据数据中的新字段来创建新的映射.
在正式数据写入之前我们可以自己定义Mapping,等数据写入时,会按照定义的Mapping进行映射。
如果后续数据有其他字段时,Elasticsearch会自动进行处理。
操作范例:
curl -XPUT 'http://localhost:9200/logstash-2016.01.01/_mapping' -d '
{
"mappings" : {
"syslog" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
"message" : {
"type" : "string"
},
"pid" : {
"type" : "long"
}
}
}
}
}
'
我们已经存在的索引是不可以更改它的映射的.
对于存在的索引,只有新字段出现时,Elasticsearch才会自动进行处理。
如果确实需要修改映射,那么就使用reindex,采用重新导入数据的方式完成。
Elasticsearch并不提供针对索引的rename,mapping、alter等操作。
如果需要更改某个字段的mapping映射,只有一些其他工具。
用Logstash重建索引:
在最新版的logstash中,对logstash-input-elasticsearch插件做了一定的修改,使得通过Logstash完成重建索引成为可能。
虽然写入数据时Elasticsearch会自动的添加映射进行处理,但是删除数据并不会删除数据的映射
#curl -XDELETE 'http://localhost:9200/logstash-2016.01.01/syslog' 删除了syslog下面的全部数据,但是syslog的映射还在
删除映射的命令:
#curl -XDELETE 'http://localhost:9200/logstash-2016.01.01/_mapping'
删除索引的话映射也会删除
#curl -XDELETE 'http://localhost:9200/logstash-2016.01.01'
Elasticsearch数据类型
Elasticsearch自带的数据类型是Lucene索引的依据,也是我们做手动映射调整到依据。
映射中主要就是针对字段设置类型以及类型相关参数。
JSON基础类型如下:
字符串:string
数字:byte、short、integer、long、float、double、
时间:date
布尔值: true、false
数组: array
对象: object
Elasticsearch独有的类型:
多重: multi
经纬度: geo_point
网络地址: ip
堆叠对象: nested object
二进制: binary
附件: attachment
注意点:
Elasticsearch映射虽然有idnex和type两层关系,但是实际索引时是以index为基础的。
如果同一个index下不同type的字段出现mapping不一致的情况
虽然数据依然可以成功写入并生成并生成各自的mapping,
但实际上fielddata中的索引结果却依然是以index内第一个mapping类型来生成的。
Elasticsearch的Mapping提供了对Elasticsearch中索引字段名及其数据类型的定义
还可以对某些字段添加特殊属性:该字段是否分词,是否存储,使用什么样的分词器等。
字段都有几个基本的映射选项,类型(type)和索引方式(index)。
以字符串类型为例,index有三个选项:
analyzed:默认选项,以标准的全文索引方式,分析字符串,完成索引。
not_analyzed:精确索引,不对字符串做分析,直接索引字段数据的精确内容。
no:不索引该字段。
对于日志文件来说,很多字段都是不需要再Elasticsearch里做分析这步的,所以,我们可以这样设置:
"myfieldname" : {
"type" : "string",
"index" : "not_analyzed"
}
时间格式:
@timestamp这个时间格式在Nginx中叫$time_iso8601,在Rsyslog中叫date-rfc3339
在Elasticsearch中叫dateOptionalTime.
Elasticsearch完全可以接受其他时间格式作为时间字段的内容。
对于Elasticsearch来说,时间字段内容实际上就是转换成long类型作为内部存储的。
所以,接受段的时间格式可以任意设置:
@timestamp: {
"type" : "date",
"index" : "not_analyzed",
"doc_values" : true,
"format" : "dd/MM/YYYY:HH:mm:ss Z"
}
多种索引:
多重索引是Logstash用户习惯的的一个映射,因为这是Logstash默认开启的配置:
"title" : {
"type" : "string",
"fields" : {
"raw" : {
"type" : "string",
"index" : "not_analyzed"
}
}
}
在title字段数据写入的时候,Elasticsearch会自动生成两个字段,分别是title和title.raw。
这样,有可能同时需要分词和不分词结果的环境,就可以很灵活的使用不同的索引字段了。
比如,查看标题中最常用的单词,应该是使用title字段,查看阅读数最多的文章标题,应该是使用title.raw字段。
数组可以使空的。这等于有零个值。
事实上,Lucene没法存放null值,所以一个null值的字段被认为是空字段。
下面这四个字段将被识别为空字段而不被索引:
"empty_string" : "",
"null_value" : null,
"empty_array" : [],
"array_with_null_value" : [ null ]
相关文章
- ubuntu系统home(主文件夹)中的内容在桌面的显示
- python截取指定字符串前面的内容_字符串中怎么截取指定字符的前面的字符和后面的字符...
- 【整理】Virtualbox中的网络类型(NAT,桥接等),网卡,IP地址等方面的设置
- ES6更新的内容中什么是proxy
- 2024年网络安全山东省赛-SMB信息收集解析(中职组)_使用访问工具对服务器服务访问,将服务器中管理员桌面的文本文档里的内容作为 flag
- HTML中让表单input等文本框为只读不可编辑但可以获取value值的方法;让文本域前面的内容显示在左上角,居中 - Chen_s
- Winform主菜单两种实现方式-1.)从工具箱中双击MenuStrip控件,窗体的顶部就会放置一个MenuStrip控件,或者在工具箱中单击MenuStrip控件,拖至窗体中也可以. 2.)在MenuStrip的“Type Here”输入主菜单和菜单名字,热键用(&X)表示. 用快捷键选择主菜单,可以用Alt + 预定义的按键来实现,子菜单的选择只需要按定义的热键即可. 3.)双击File*菜单下面的子菜单,创建子菜单Open、Save、Exit的单击事件代码: private void OpenOToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog { //初始化打开对话框的路径 InitialDirectory = @"D:\", Title = "Open File", //定义可显示的文件类型; Filter = "txt file(*.txt)|*.txt|All file(*.*)|*.*", //定义默认显示的文件类型为txt FilterIndex = 1, //对话框关闭后将复位初始化路径 RestoreDirectory = true }; if (ofd.ShowDialog == DialogResult.OK) { //根据打开对话框选择的文件名,加载文本内容到富文本框中. richtxtContent.Text = File.ReadAllText(ofd.FileName); } } private void SaveSToolStripMenuItem_Click(object sender, EventArgs e) { SaveFileDialog sfd = new SaveFileDialog { //初始化保存对话框的路径 InitialDirectory = @"D:\", Title = "Save File", //定义可显示的文件类型; Filter = "txt file(*.txt)|*.txt|All file(*.*)|*.*", //定义默认显示的文件类型为txt FilterIndex = 1, //对话框关闭后将复位初始化路径 RestoreDirectory = true }; if(sfd.ShowDialog == DialogResult.OK) { //保存文件 File.WriteAllText(sfd.FileName, richtxtContent.Text); //清空富文本框内容 richtxtContent.Clear; } } private void exitEToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit; } 4.)执行下程序,加载指定的txt文件到富文本框中,如下: 5.)在富文本框中更新加载进来的txt文件内容. 6.)Alt + F热键打开文件的下拉菜单,单击S保存富文本框中的内容到指定的文件.打开txt验证菜单单击事件保存文件成功. 二.实现winform主菜单的方法2:MenuStrip类和toolStripMenuItem类实例化对象,在主窗体加载事件中实现如下代码:
- excel用函数去掉单元格内容中的括号,并只保留单元格里面的内容
- 用Word收集网页中的内容,用文档结构图整理
- es中对mapping的理解