es笔记---新建es索引
es对索引的一堆操作都是用restful api去进行的,参数时一堆json,一年前边查边写搞过一次,这回搞迁移,发现es都到6.0版本了,也变化了很多,写个小笔记记录一下。
创建一个es索引很简单,一个put请求。
PUT /my_index
{
"settings": { ... any settings ... },
"mappings": {
"type_one": { ... any mappings ... },
},
"aliases" : {...}
}
新建一个索引,包含settings mappings 和aliases。settings设置分片等一些参数,mappings设置如何处理索引的各个type,aliases以前没有用过,看上去我不太会用到,这边就不记录了。
settings
这边有非常多的参数可以设置,不过官方是不建议修改的。常见需要改的就俩
- number_of_shards
每个索引的主分片数,默认值是 5 。这个配置在索引创建后不能修改。 - number_of_replicas
每个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置可以随时修改。
PUT /my_temp_index
{
"settings": {
"number_of_shards" : 3,
"number_of_replicas" : 2
}
}
给索引设置settings值
PUT /my_temp_index/_settings
{
"number_of_replicas": 1
}
修改settings值
mappings
每个文档都有type,每种type都会有自己的mapping。mapping定义了type的field,每个field的数据类型,以及es如何处理这些field。
注意,一个mappings里边不建议有多个type,而且在es6之后的版本很有可能会不允许有多个type。
按照官方的计划,es7-es9会逐步去掉type
建议是每个index都只有一个type,原因是一个index中的各个type的字段并不是完全独立的,一个index中多个type会造成一些浪费。
可以通过/_mapping 来查看es中一个或多个索引中的一个或多个mapping。
数据类型 (field)
- 字符串 string
- text
- keyword
- 数字
- long integer short byte double float half_float scaled_float
- 布尔型 boolean
- 日期 date
- range
- integer_range
- float_range
- long_range
- double_range
- date_range
- array
- object
还有很多我确定我不会用到的类型。
当索引一个包含新的field的文档时,es会使用<b>动态映射</b>,通过JSON中基本数据类型,尝试猜测field类型
一般情况下,默认映射就足够了。es会自动把如 123 映射为integer,123.123映射为double,但是很多情况下,我们都需要自定义映射,特别是string类型。
自定义映射可以做这些事:
- 配置为全文字符串和精确字符串 (如name字段我更希望他不要分词,而desc字段更需要分词后搜索)
- 使用特定语言分析器
- 。。。
一个field最主要的属性是type,对于大部分field,一般只需要设置type就可以了:
{
"number_of_clicks": {
"type": "integer"
}
}
range
PUT range_index
{
"mappings": {
"my_type": {
"properties": {
"expected_attendees": {
"type": "integer_range"
},
"time_frame": {
"type": "date_range",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
插入格式
PUT range_index/my_type/1
{
"expected_attendees" : {
"gte" : 10,
"lte" : 20
},
"time_frame" : {
"gte" : "2015-10-31 12:00:00",
"lte" : "2015-11-01"
}
}
搜索格式
POST range_index/_search
{
"query" : {
"range" : {
"time_frame" : {
"gte" : "2015-10-31",
"lte" : "2015-11-01",
"relation" : "within"
}
}
}
}
这部分比较简单 不细致展开了
string
对于string类型,以前是只有string,现在分为了两种,keyword和text
text
text会先经过分析器,然后索引起来,类似desc这样的字段就需要使用text。有以下几个重要字段。
analyzer
分析器,可以指定如何处理这个string,比如我想先把所有html的标记全去掉,再分词,再删除无用的停顿次,然后把剩下的token索引起来。可以使用默认的standard分析器,也可以指定别的内置的分析器。也可以使用插件安装的第三份分析器,如ik,也可以自定义分析器。
分析器使用起来很简单
{
"desc": {
"type": "string",
"analyzer": "ik_smart"
}
}
其中,ik_smart是已经安装好的第三方分析器。
index
是否设置为可以搜索,boolean
norm
我理解是算分时是否进行一些标准化处理,需要额外的资源。
fields
这个字段很有趣.. 先看个例子
"filename":{
"type":"text",
"norms":false,
"fields":{
"raw":{
"type":"keyword",
"ignore_above":256
}
}
},
一个filename的字段,这边设置的是type是text,会分词搜索。但有时候我们需要精准匹配,就可以使用filename.raw。插入时只需要输入filename,保存在es里边的会有两份,filename和filename.raw。
keyword
和text不同,keyword不会经过分析器,搜索时会精确匹配。
index fields
这两个参数和text的相同
ignore_above
丢掉超过一定长度的字符串
映射操作
新建映射
PUT /index_name
{
"mappings": {
"person" : {
"properties" : {
"desc" : {
"type" : "string",
"analyzer": "ik_smart"
},
"birth" : {
"type" : "date"
},
"name" : {
"type" : "string",
"index" : "not_analyzed"
},
"user_id" : {
"type" : "long"
}
}
}
}
}
新建一个index,desc字段用ik分词索引,birth设置为日志,name字段精确索引,user_id设置为long型。
更新映射
PUT /index_name/_mapping/person
{
"properties" : {
"tag" : {
"type" : "string",
"index": "not_analyzed"
}
}
}
新增一个tag字段。
作者:辰辰沉沉沉
链接:https://www.jianshu.com/p/bd23b86848dd
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
es笔记---新建es索引的更多相关文章
- ES(ElasticSearch) 索引创建
个人分类: ElasticSearchindex 环境:ES 6.2.2 os:Centos 7 kibana:6.2.2 1.创建新的索引(index) PUT indexTest001 结果 ...
- 白日梦的Elasticsearch实战笔记,ES账号免费借用、32个查询案例、15个聚合案例、7个查询优化技巧。
目录 一.导读 二.福利:账号借用 三._search api 搜索api 3.1.什么是query string search? 3.2.什么是query dsl? 3.3.干货!32个查询案例! ...
- 白日梦的ES笔记三:万字长文 Elasticsearch基础概念统一扫盲
目录 一.导读 二.彩蛋福利:账号借用 三.ES的Index.Shard及扩容机制 四.ES支持的核心数据类型 4.1.数字类型 4.2.日期类型 4.3.boolean类型 4.4.二进制类型 4. ...
- ES使用小结之索引Rollover
Elasticsearch 使用小结之索引Rollover 索引名 一般而言,客户端将数据每天写入一个索引,比如直接写入YYYY-MM-HH格式的索引,那么我们只需要在写入的客户端里面获取时间,然后得 ...
- ES 文档与索引介绍
在之前的文章中,介绍了 ES 整体的架构和内容,这篇主要针对 ES 最小的存储单位 - 文档以及由文档组成的索引进行详细介绍. 会涉及到如下的内容: 文档的 CURD 操作. Dynamic Mapp ...
- Mongodb Manual阅读笔记:CH7 索引
7索引 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔记 ...
- Mysql数据库学习笔记之数据库索引(index)
什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...
- SQL反模式学习笔记13 使用索引
目标:优化性能 改善性能最好的技术就是在数据库中合理地使用索引. 索引也是数据结构,它能使数据库将指定列中的某个值快速定位在相应的行. 反模式:无规划的使用索引 1.不使用索引或索引不足 2.使用了 ...
- SQL学习笔记之MySQL索引知识点
0x00 概述 之前写过一篇Mysql B+树学习,简单的介绍了B+数以及MySql使用B+树的原因, 有了这些基础知识点,对MySql索引的类型以及索引使用的一些技巧,就比较容易理解了. 0x01 ...
随机推荐
- Codeforces Round #575 (Div. 3) B. Odd Sum Segments (构造,数学)
B. Odd Sum Segments time limit per test3 seconds memory limit per test256 megabytes inputstandard in ...
- 洛谷P2401 不等数列 题解
可食用的题目链接 题解: 有题目得:这个题有巧做法而不是暴力模拟.废话 这个题看着像一道dp,因为可以由前一种(数据更小的推出数据更大的)推出后一种. 我们设已经得到了n-1个数的总方法(1~n-1) ...
- Idea集成使用SVN教程
第一步:下载svn的客户端,通俗一点来说就是小乌龟啦!官网下载地址:https://tortoisesvn.net/downloads.html 下载之后直接安装就好了,但是要注意这里,选择安装所有的 ...
- MongoDB实现增删查方法
1.添加信息 public void addInfo(Infomation infomation) { try{ // TODO Auto-generated method stub //连接Mong ...
- centos6.5下修改系统的roo用户/非root用户的密码
1.修改系统root用户的密码 [........~]# passwd然后输入新密码,若提示密码太简单,无需理会,直接敲回车: 然后再次输入新密码,即可修改成功. 2.修改系统非root用户的密码:e ...
- linux下yum安装python3
linux下yum安装python3 linux下yum安装python3yum install python34 -ypython3 --version wget --no-check-certif ...
- 树莓派Zero W无键盘无屏幕初始化
买了个树莓派Zero W,结果发现没mini hdmi线 淘宝了一根mini hdmi,等了5天,拿到手后发现zero还没地接键盘,这下脑袋大了 查了下资料,发现树莓的系统,可以这boot分区中加入一 ...
- 【NOIP2016提高A组五校联考1】道路规划
题目 分析 我们考虑,当现在有一个合法的集合时,如何往里面增加一个点,使这个集合仍然合法. 假设现在有一个合法的集合, 那么当我们加入一个点,它的道路穿过来整个集合,那么 然后搞一遍最长下降子序列就可 ...
- 19.顺时针打印矩阵(python)
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...
- 如何使用dump文件进行调试
转载[文尾出处链接] 1 简介第一次遇到程序崩溃的问题,之前为单位开发了一个插件程序,在本机运行没有出现问题,但把生成的可执行文件拷贝到服务器上一运行程序,刚进入插件代码,插件服务就崩溃了,当时被这个 ...