es6.3学习笔记
es版本发布相当快,从1.x到2.x,再直接到5.x,6.x
索引这个词在es中有多重意思:
索引(名词):一个索引类似于传统数据库中的一个索引,用于存储关系型文档。索引的复数为indexes或indices。
索引(动词):索引一个文档就是存储一个文档到一个索引(名词)中以便它可以被检索和查询到,相当于SQL中的upsert。
倒排索引:关系型数据库通过增加一个索引比如B-tree索引到指定列上,以便提升数据检索速度。es使用了一个叫做倒排索引的结构来达到相同的目的。默认的,一个文档中的每一个属性都是被索引的(有一个倒排索引的)和可搜索的。一个没有倒排索引的属性是不能被搜索到的。
es是利用分片将数据分发到集群各处的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。当集群规模扩大或者缩小时,es会自动在各节点中迁移分片,使得数据依然均匀分布在集群里。一个分片可以是主分片或者副本分片。副本分片是主分片的拷贝。技术上说,一个主分片最多能够存储Integer.MAX_VALUE - 128个文档。在索引建立的时候就已经确定了主分片数(number_of_shards,默认5个主分片),不能改,但是副本分片数(number_of_replicas)可以随时修改。
在es中每个文档都有一个版本号,当每次对文档进行修改时(包括删除),_version 的值都会递增。
本次学习的是es6.3.1版本,看的是6.3版本的官方文档。部门用的是5.6.3
添加索引:
put /website
{
"settings":{
"number_of_shards":3,
"number_of_replicas":1
}
}
更改索引的副本数:
put /website/_settings
{
"settings":{
"number_of_replicas":0
}
}
查看某index的alias:
get /${index}/_alias
如 get /posts/_alias
往某索引添加数据,指定id,put、post都可以:
put /website/blog/1
{
"id":"1",
"name":"zhangsan"
}
往某索引添加数据,不指定id,只能用post:
post /website/blog
{
"name":"lisi",
"password":"lisi"
}
返回文档的一部分:
get /website/blog/1?_source=id,name
只返回_source数据,不要_index、_type、_id等元数据:
get /website/blog/1/_source
更新整个文档,再次put该文档即可:
put /website/blog/1
{
"password":"lisi",
"city":"henan"
}
在es中文档是不可改变的,不能修改它们,只能替换。id=1的文档,原本数据是{"id":"1","name":"zhangsan"},现在变成了{"password":"lisi","city":"henan"},新数据和之前数据一点关系都没有。
在内部,es将旧文档标记为已删除,并增加一个全新的文档。尽管不能再对旧版本文档进行访问,但它并不会立即消失,当继续索引更多数据时,es会在后台清理这些已删除的文档。
部分更新文档。将接收到的文档与现有文档合并,覆盖现有字段,增加新字段:
有doc和script两种方式
doc方式:
post /website/blog/1/_update
{
"doc":{
"password":"abc123",
"title":"woshititle"
}
}
此时id=1的文档数据为
{
"password": "abc123",
"city": "henan",
"title": "woshititle"
}
script方式:
post /website/blog/1/_update
{
"script": {
"source": "ctx._source.title='haizeiwang';ctx._source.birthday='1993/04/25';"
}
}
此时id=1的文档数据为
{
"password": "abc123",
"city": "henan",
"title": "haizeiwang",
"birthday": "1993/04/25"
}
一次取回多个文档,用_mget。既可以一次从单个索引中取多个文档,也可以一次从多个索引中取多个文档。即使某一个文档不存在,也不会报错:
一次从单个索引中取多个文档:
get /website/blog/_mget
{
"docs": [{
"_id": 1
},{
"_id": 123
},{
"_id": 1234
}]
}
_id指定文档的id。也可以省略docs数组,用ids数组,如下
get /website/blog/_mget
{
"ids": [1,123,1234]
}
一次从多个索引中取多个文档:因为多个文档在多个索引中,所以需要指定每个文档所属的索引
get /_mget
{
"docs": [{
"_index": "website",
"_type": "blog",
"_id": 1
},{
"_index": "spark",
"_type": "index",
"_id": 1
}]
}
如上,docs 数组包含要返回的多个文档信息,主要是用于指定index的_index、用于指定type的_type、用于指定id的_id。
批量操作,用_bulk。允许在单次请求中依次执行多个index、update、delete操作:
post _bulk
{"index":{"_index":"spark","_type":"index","_id" :"2"}}
{"name":"nimabi"}
{"index":{"_index":"spark","_type":"index","_id":"3"}}
{"age":"18"}
{"update":{"_index":"spark","_type":"index","_id":"2"}}
{"doc":{"age":"25"}}
{"delete":{"_index":"spark","_type":"index","_id":"3"}}
多索引查询:
在所有索引中搜索:get /_search
在spark索引中搜索:get /spark/_search
在spark索引中搜索index类型:get /spark/index/_search
在spark和website索引中搜索:get /spark,website/_search
在以s开头的索引中搜索:get /s*/_search
在spark和website索引中搜索index和blog类型:get /spark,website/index,blog/_search
在所有索引中搜索index和blog类型:get /_all/index,blog/_search
分页:
get /website/blog/_search?q=*&sort=account_number:asc,balance:desc&from=100&size=10
text和keyword的区别:
text和keyword都表示字符串类型(从5.x版本开始,废弃了string类型,拆分为text和keyword)
text 类型的值会被分词器分词(默认分词器是standard,中文的话需要引入ik分词器或者结巴分词器),并放入倒排索引。不能用于排序、聚合(即根据此字段排序会报错),除非显式指定 fielddata=true
keyword类型的值不会被分词器分词,可用于排序、聚合
某字符串值已经post进某index某type,如何查看分词情况:
get /${index}/${type}/${id}/_termvectors?fields=${fields_name}
如 get /posts/doc/1/_termvectors?fields=message,其中posts是index,doc是type,1是id,message是对应的字段名
某字符串会被某分词器处理成什么样子:
post /_analyze
{
"analyzer": "ik_max_word",
"text": "我是需要测试的字符串"
}
其中analyzer的值是要使用的分词器,text值是要测试的字符串。
es6.3学习笔记的更多相关文章
- es6小白学习笔记(一)
1.let和const命令 1.es6新增了let和const命令,与var用法类似,但它声明的变量只在let所在的代码块内有效(块级作用域,es5只有全局和函数作用域) { let a = 1; v ...
- JavaScript(ES6)学习笔记-Set和Map数据结构(一)
一.Set 1.ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. , , , , ']); s; // ...
- ES6 promise学习笔记 -- 基本用法
ES6 规定,Promise对象是一个构造函数,用来生成Promise实例. 下面代码创造了一个Promise实例. const promise = new Promise(function(reso ...
- ES6 Generator 学习笔记一
Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同. Generator 函数有多种理解角度.从语法上,首先可以把它理解成,Generator 函数是一个状态机 ...
- 珠峰 - 郭永峰react课程 node es6 babel学习笔记
npm install babel-cli -g //安装babel babel index.js -o a.js //等同于 babel index.js --out-file a.js 复制ind ...
- JavaScript(ES6)学习笔记-Set和Map与数组和对象的比较(二)
一.Map,Set,Array对比: 1.增 let map = new Map(); let set = new Set(); let array = []; map.set('t',1); //M ...
- ES6学习笔记(七)-对象扩展
可直接访问有道云笔记分享链接查看es6所有学习笔记 http://note.youdao.com/noteshare?id=b24b739560e864d40ffaab4af790f885
- es6学习笔记-class之一概念
前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...
- ES6学习笔记<五> Module的操作——import、export、as
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...
随机推荐
- C++ 中 const 使用
如果你一看见C++中const就脱口而出:“常量!”那只能说明你对c++不甚了解.或者说你太2了. const得一些使用方法与场景如下: 1:const修饰普通变量,全局变量,静态变量 ; ; 变量保 ...
- SpringMVC多个拦截器
拦截器三个函数的顺序
- 关于用Date类计算活了多少天和用Calendar类计算闰年的demo
在javaSE阶段,Date类和Calendar类以后会经常用到 这两个类当中的一些常用方法 通过两个demo 进行学习和练习 第一个要求如下:让用户自己输入yyyy-MM-dd 格式的年月日 然后得 ...
- Ubuntu学习小结(一) 基础知识,系统安装,软件安装,解压缩
这段时间,抽空研究了一下Ubuntu,虽然也有过到目前为止使用计算机最作死的经历,但目前已经学会了一些最基本的操作.在这里简单的记录一下,算是吸取的教训,供其他人借鉴. 1.装Ubuntu系统.装Ub ...
- ObjectARX环境搭建之vs2010+objectArx2012+AutoCAD2012
---------------------------------------------------------------------------------------------------- ...
- Java50道经典习题-程序44 偶数的素数和
题目:一个偶数总能表示为两个素数之和.分析:一个偶数可能会有不止一对两个素数之和的情况 例如:20=3+17 20=7+13 import java.util.Scanner; public clas ...
- Linux 编写安全巡检脚本
Linux 编写安全巡检脚本 检测/etc/passwd,/etc/shadow文件是否锁定 检测/etc/login.defs配置文件中密码有效期设置是否得当 检查所有用户账户(非系统账户)中是否存 ...
- codevs1169, 51nod1084(多线程dp)
先说下codevs1169吧, 题目链接: http://codevs.cn/problem/1169/ 题意: 中文题诶~ 思路: 多线程 dp 用 dp[i][j][k][l] 存储一个人在 (i ...
- 洛谷P3648 [APIO2014]序列分割(斜率优化)
传送门 没想到这种多个状态转移的还能用上斜率优化……学到了…… 首先我们可以发现,切的顺序对最终答案是没有影响的 比方说有一个序列$abc$,每一个字母都代表几个数字,那么先切$ab$再切$bc$,得 ...
- 10.9 guz模拟题题解
感谢@guz 顾z的题题解 考试共三道题,其中 第一题help共10个测试点,时间限制为 1000ms,空间限制为 256MB. 第二题escape共20个测试点,时间限制为1000ms2000ms, ...