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学习笔记的更多相关文章

  1. es6小白学习笔记(一)

    1.let和const命令 1.es6新增了let和const命令,与var用法类似,但它声明的变量只在let所在的代码块内有效(块级作用域,es5只有全局和函数作用域) { let a = 1; v ...

  2. JavaScript(ES6)学习笔记-Set和Map数据结构(一)

    一.Set 1.ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. , , , , ']); s; // ...

  3. ES6 promise学习笔记 -- 基本用法

    ES6 规定,Promise对象是一个构造函数,用来生成Promise实例. 下面代码创造了一个Promise实例. const promise = new Promise(function(reso ...

  4. ES6 Generator 学习笔记一

    Generator 函数是 ES6 提供的一种异步编程解决方案,语法行为与传统函数完全不同. Generator 函数有多种理解角度.从语法上,首先可以把它理解成,Generator 函数是一个状态机 ...

  5. 珠峰 - 郭永峰react课程 node es6 babel学习笔记

    npm install babel-cli -g //安装babel babel index.js -o a.js //等同于 babel index.js --out-file a.js 复制ind ...

  6. JavaScript(ES6)学习笔记-Set和Map与数组和对象的比较(二)

    一.Map,Set,Array对比: 1.增 let map = new Map(); let set = new Set(); let array = []; map.set('t',1); //M ...

  7. ES6学习笔记(七)-对象扩展

    可直接访问有道云笔记分享链接查看es6所有学习笔记 http://note.youdao.com/noteshare?id=b24b739560e864d40ffaab4af790f885

  8. es6学习笔记-class之一概念

    前段时间复习了面向对象这一部分,其中提到在es6之前,Javasript是没有类的概念的,只从es6之后出现了类的概念和继承.于是乎,花时间学习一下class. 简介 JavaScript 语言中,生 ...

  9. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

随机推荐

  1. 100851K King’s Inspection

    传送门 题目大意 给你一张图,求这张图的汉密尔顿回路. 分析 因为m≤n+20,所以如果存在回路一定是在一个环中加入了至多20条边.我们先考虑dfs,但我们发现如果出现图1这种情况就会是复杂度爆炸 图 ...

  2. Luogu 4552 [Poetize6] IncDec Sequence

    在BZOJ上好像被权限掉了. 考虑差分,定义差分数组$b$ $$b_i = \left\{\begin{matrix} a_i \ \ \ (i == 1)\\ a_i - a_{i - 1}\ \ ...

  3. spark sql使用sequoiadb作为数据源

    目前没有实现,理一下思路,有3中途径: 1:spark core可以使用sequoiadb最为数据源,那么是否spark sql可以直接操作sequoiadb. 2: spark sql支持Hive, ...

  4. React 和 Redux理解

    学习React有一段时间了,但对于Redux却不是那么理解.网上看了一些文章,现在把对Redux的理解总结如下 从需求出发,看看使用React需要什么 1. React有props和state pro ...

  5. Linux下boost编译安装

    说明:下面内容仅针对Linux环境(boost官网为:http://www.boost.org/,可从这里下载它的源代码包,这里要求下载.tar.gz包,而非.7z..zip或bz2包). 在当前目录 ...

  6. 让 Winform 窗口悬浮的简单方式

    很多次设置这个 TopMost 属性会莫名的不起作用,有时又可以.一直在想是为什么会这样? 后来多次尝试,发现这个属性必须在窗体某些其他属性后设置,比如在 Height.Width 这样的属性后. 看 ...

  7. Data Base 常用数据库之top/limit/rownum用法

    常用数据库之top/limit/rownum用法 一.常用数据库: sql server: select top 10 from users where status=1 mysql: select ...

  8. 手把手教你如何制作和使用lib和dll_转载

    目录 静态库 什么是静态库? 怎么创建 如何使用 静态库的第一种使用方法 静态库的第二种使用方法 动态链接库 动态库是什么? 怎么创建 如何使用 隐式调用 显式调用 静态库什么是静态库?我们先来说一下 ...

  9. 为什么使用docker

    为什么要使用Docker? 作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势. 更高效的利用系统资源 由于容器不需要进行硬件虚拟及运行完整操作系统等额外开销,Docker对系 ...

  10. 20164305 徐广皓 Exp6 信息搜集与漏洞扫描

    信息搜集技术与隐私保护 间接收集 无物理连接,不访问目标,使用第三方信息源 使用whois/DNS获取ip 使用msf中的辅助模块进行信息收集,具体指令可以在auxiliary/gather中进行查询 ...