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. vue 之 箭头函数与对象的单体模式

    箭头函数 基本语法: ES6允许使用“箭头”(=>)定义函数 var f = a = > a //等同于 var f = function(a){ return a; } 如果箭头函数不需 ...

  2. Linux网络服务管理命令

    netstat命令 示例:查看指定的服务是否开启netstat | grep ssh | grep -v grep 网络下载器————wget wget是一个Linux环境下用于从WWW上提取文件的工 ...

  3. 【Java学习】Java泛型详解

    1. 概述 在引入范型之前,Java类型分为原始类型.复杂类型,其中复杂类型分为数组和类.引入范型后,一个复杂类型就可以在细分成更多的类型.例如原先的类型List,现在在细分成List<Obje ...

  4. 简单介绍Jenkins&持续集成

    1.定义 持续集成(Continuous integration),简称CI. 随着软件项目复杂度的增加,就会对集成和确保软件组件能够在一起工作提出了更多的要求-要早集成.常集成. CI不是一项软件开 ...

  5. CI框架源码学习笔记1——index.php

    做php开发一年多了,陆陆续续用过tp/ci/yii框架,一直停留在只会使用的层面上,关于框架内部的结构实际上是不甚了解的.为了深入的学习,决定把CI框架的源码从头到尾的学习一下, 主要因为CI框架工 ...

  6. SP263 PERIOD - Period KMP技巧

    \(\color{#0066ff}{题目描述}\) 如果一个字符串S是由一个字符串T重复K次形成的,则称T是S的循环元.使K最大的字符串T称为S的最小循环元,此时的K称为最大循环次数. 现给一个给定长 ...

  7. C++基础学习1: C++布尔类型

    布尔类型(bool)是C++新增的一种基本数据类型.在标准的C语言中并未定义bool类型,如果需要使用bool类型, 程序员可以通过宏定义来自定义一个bool类型,定义语句如下: #define bo ...

  8. springboot整合activemq(二),消费均匀分析

    问题分析:当如果多个消费者是什么情况呢 topic消费是友多个消费者的,是支持的,但是queue是支持,但是不能保证多个消费均匀消费,在分布式环境下怎么操作呢: 看案例: 在前面整合代码执行: 浏览器 ...

  9. 小程序获取unionId以及手机号

    1.前端小程序传入后端接口的入参如下: code :临时登录凭证(必传)encryptedData:密文iv:偏移量 2.接收到入参后的java后端接口中的代码如下: @Action(value = ...

  10. C语言值拷贝传递机制

    当参数是常量,变量,或表达式时,传递的数据就是这些数据对象所具有的内容,这种方式称为数值参数传递方式(简称传值方式).如果函数调用时所传递的实参是数据对象在内存中的存储单元的首地址值,这种方式称为地址 ...