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工程拆分成一个个功能相对独立但相互依赖的小 ...
随机推荐
- android sdk更新源
什么是Android SDK: SDK:(software development kit)软件开发工具包.被软件开发工程师用于为特定的软件包.软件框架.硬件平台.操作系统等建立应用软件的开发工具的集 ...
- 数字图像处理实验(3):PROJECT 02-03, Zooming and Shrinking Images by Pixel Replication 标签: 图像处理matlab 20
实验要求: Zooming and Shrinking Images by Pixel Replication Objective To manipulate a technique of zoomi ...
- GCD 学习(二)dispatch_queue_create创建Dispatch Queue
摘录于: http://zhuyanfeng.com/archives/3042 dispatch_queue_create 用于创建用户线程队列.可以创建Serial/Concurrent Disp ...
- ARC059F
传送门 分析 见ptx大爷博客 代码 #include<iostream> #include<cstdio> #include<cstring> #include& ...
- WordCountPro小程序
WordCountPro小程序 基本任务 1.githu地址 https://github.com/JarrySmith/WordCountPro 2.psp2.1表 PSP2.1 PSP阶段 预 ...
- Linux下面的IO模型
1. Linux下的五种I/O模型 阻塞I/O模型: 一直阻塞 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好. 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空 ...
- Mac 使用 NFS 连接 Centos 上的共享文件夹
Mac 使用 NFS 连接 Centos 上的共享文件夹 NFS介绍 网络文件系统(Network File System,NFS),一种使用于分散式文件系统的协议,由升阳公司开发,于1984年向外公 ...
- Xamarin.Forms(一) 学习笔记
Xamarin.Forms是Xamarin跨平台开发app的跨平台的一个Framework,要使用这套Framework,要从XAML说起. XAML是同通过xml的方式来描述控件和动作,可以通过编译 ...
- 转【C#调用DLL的几种方法,包括C#调用C\C++\C#DLL】
C#中dll调用方法 一. DLL与应用程序 动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一, ...
- Velodyne VPL16 configuration in ROS Kinetic
1. 驱动安装 sudo apt-get install ros-kinetic-velodyne 2. 在已有工作空间catkin_ws中,添加Velodyne包 cd ~/catkin_ws/sr ...