
Elasticsearch核心知识
tianlan996
这个作者很懒,什么都没留下…
展开
-
Elasticsearch索引原理
本位转自:https://www.cnblogs.com/dreamroute/p/8484457.htmlElasticsearch-基础介绍及索引原理分析最近在参与一个基于Elasticsearch作为底层数据框架提供大数据量(亿级)的实时统计查询的方案设计工作,花了些时间学习Elasticsearch的基础理论知识,整理了一下,希望能对Elasticsearch感兴趣/想了解的同学有...转载 2019-03-18 13:54:04 · 142 阅读 · 0 评论 -
二十 query语法案例
1. match allGET /_search{ "query": { "match_all": {} }}2. match //会进行分词,查询一个filedGET /_search{ "query": { "match": { "title": "my elasticsearch article" }}}3. multi ...原创 2019-06-25 20:21:36 · 278 阅读 · 0 评论 -
十五 mapping总结
mapping,就是index的type的元数据,每个type都有一个自己的mapping,决定了数据类型,建立倒排索引的行为,还有进行搜索的行为往es里面直接插入数据,es会自动建立索引,同时建立type以及对应的mapping mapping中就自动定义了每个field的数据类型 不同的数据类型(比如说text和date),可能有的是exact value,有的是full text ...原创 2019-06-22 22:08:26 · 1135 阅读 · 0 评论 -
十六 mapping手动建立&指定string是否分词
创建index时可以手动建立mapping,并且可以为mapping添加新的属性filed。但是,不能对已有的filed进行修改。创建mapping:PUT /website{ "mappings": { "article": { ---mapping名称 "properties": { ---属性filed "author_id": { ...原创 2019-06-23 14:48:54 · 259 阅读 · 0 评论 -
十六 mapping复杂数据类型
1、multivalue field{ "tags": [ "tag1", "tag2" ]}建立索引时与string是一样的,数据类型不能混2、empty fieldnull,[],[null]3、object fieldPUT /company/employee/1{ "address": { "country": "china", "provin...原创 2019-06-23 15:14:37 · 317 阅读 · 0 评论 -
十七 GET与POST方式获取数据
1、search api的基本语法GET /search{}GET /index1,index2/type1,type2/search{}GET /_search{ "from": 0, "size": 10}2、http协议中get是否可以带上request bodyHTTP协议,一般不允许get请求带上request body,但是因为get更加适合描述查询...原创 2019-06-23 15:16:43 · 488 阅读 · 0 评论 -
二十六 mapping root object深入剖析
root object就是某个type对应的mapping json,包括如下几种:1. properties2. metadata(_id, _source, _type)3. setting(analyzer)4. 其它settings(比如include_in_all)例如:PUT /my_index{ "mappings": { "my_type":...原创 2019-07-07 18:22:36 · 254 阅读 · 0 评论 -
二十七 自定义dynamic mapping策略
1. dynamic mapping策略种类3种策略:true:遇到陌生字段,就进行dynamic mappingfalse:遇到陌生字段,就忽略strict:遇到陌生字段,就报错例如:PUT /my_index{ "mappings": { "my_type": { "dynamic": "strict", ---使用strict策略 "...原创 2019-07-07 18:39:51 · 957 阅读 · 0 评论 -
二十八 不停机重建索引&倒排序索引不可变
1、重建索引一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index中批量查询的时候,建议采用scroll api,并且采用多线程并发的方式来reindex数据,每次scoll就查询指定日期的一段数据,交给一个线程即可(1)一开始,依靠dynamic mapping...原创 2019-07-07 23:33:08 · 235 阅读 · 0 评论 -
二十一 _validate验证、结果排序规则、String排序问题、score计算方式
1. _validate可以用来验证搜索是否合法。示例:GET /test_index/test_type/_validate/query?explain{ "query": { "math": { "test_field": "test" } }}结果:{ "valid": false, "error": "org.elastics...原创 2019-06-27 21:27:44 · 589 阅读 · 0 评论 -
二十三 手动操作索引
1. 手动创建索引创建索引的语法PUT /my_index{ "settings": { ... any settings ... }, "mappings": { "type_one": { ... any mappings ... }, "type_two": { ... any mappings ... }, ......原创 2019-07-03 23:09:29 · 185 阅读 · 0 评论 -
二十四 分词器
1. 默认的分词器standard特点:standard tokenizer:以单词边界进行切分standard token filter:什么都不做lowercase token filter:将所有字母转换为小写stop token filer(默认被禁用):移除停用词,比如a the it等等2. 修改分词器的设置启用english停用词token filterPUT...原创 2019-07-03 23:18:00 · 171 阅读 · 0 评论 -
二十五 type底层存储方式
type,是一个index中用来区分类似的数据的,类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立、分词器;field的value,在底层的lucene中建立索引的时候,全部是opaque bytes类型,不区分类型的;lucene是没有type的概念的,在document中,实际上将type作为一个document的field来存储,即_type,es通过_type来...原创 2019-07-03 23:31:27 · 149 阅读 · 0 评论 -
二十二 doc values正排索引、query phase & fetch phase、搜索相关参数、scroll滚动查询
1. doc values正排索引在建立索引的时候,一方面会建立倒排索引,以供搜索用;一方面会建立正排索引,也就是doc values,以供排序,聚合,过滤等操作使用,正排索引基本上存储的就是字段本身。doc values是被保存在磁盘上的,此时如果内存足够,os会自动将其缓存在内存中,性能还是会很高;如果内存不足够,os会将其写入磁盘上。2.query phase & fe...原创 2019-06-28 21:25:47 · 300 阅读 · 0 评论 -
十九 filter与query对比
1. filter与query示例首先存入两个document:PUT /company/employee/2{ "address": { "country": "china", "province": "jiangsu", "city": "nanjing" }, "name": "tom", "age": 30, "join_date": ...原创 2019-06-25 20:14:41 · 712 阅读 · 0 评论 -
十八 Query DSL
之前常用的GET /_search?xxx=xxx的查询方式,是Query String查询方式。 Query DSL的形式如下:{ QUERY_NAME: { ARGUMENT: VALUE, ARGUMENT: VALUE,... }}{ QUERY_NAME: { FIELD_NAME: { ...原创 2019-06-25 20:09:48 · 152 阅读 · 0 评论 -
十四 搜索相关知识点(multi-search、分页搜索、deep paging、query string、_all metadata、mapping、exact value/full text)
1. 常见的搜索模式有如下形式:/_search:所有索引,所有type下的所有数据都搜索出来/index1/_search:指定一个index,搜索其下所有type的数据/index1,index2/_search:同时搜索两个index下的数据/*1,*2/_search:按照通配符去匹 配多个索引/index1/type1/_search:搜索一个index下指定的type的数据...原创 2019-06-21 22:41:35 · 421 阅读 · 0 评论 -
二 Elasticsearch分布式架构特性
一 分布式特性对用户透明使用时就像使用单机程序一样,不用关心数据如何在不同的机器上做分布式处理。Elasticsearch后台会进行如下处理:1. 分片 shard,将数据切分放到不同的机器上去。2. shard会自动均匀的分布到各个节点上面去。集群扩容的话,shard会进行均衡重分配。3. 每个shard都有副本容错,并且具有请求路由,都可以提供数据服务。4. clust...原创 2019-05-15 21:52:14 · 251 阅读 · 0 评论 -
三 ES容错
假设有3台机器,9个shard,那么每个机器上都有一个primary shard和两个replica shard,并且这两个replica shard属于另外两个primary shard。其中有一台机器是master。master故障的一瞬间,其上的primary shard丢失,那么集群中就不是所有的primary shard都是active的了,集群状态变为red,下面的流程就会发生:...原创 2019-05-21 21:35:14 · 221 阅读 · 0 评论 -
一 Elasticsearch初识
Elasticsearch是一个分布式、高性能、高可用、可伸缩的搜索和分析系统。一 功能(1)分布式的搜索引擎和数据分析引擎搜索:百度,网站的站内搜索,IT系统的检索数据分析:电商网站,最近7天牙膏这种商品销量排名前10的商家有哪些;新闻网站,最近1个月访问量排名前3的新闻版块是哪些分布式,搜索,数据分析(2)全文检索,结构化检索,数据分析全文检索:我想搜索商品名称包含牙膏...原创 2019-05-12 22:07:47 · 133 阅读 · 0 评论 -
六 ES增删改查操作
一 查询get /test_index/test_type/1{ "_index": "test_index", "_type": "test_type", "_id": "1", "_version": 2, "found": true, "_source": { "test_field1": "test field1", "test_field2...原创 2019-05-26 22:37:52 · 569 阅读 · 0 评论 -
四 ES _index _type _id 概念解析及注意事项
{ "_index": "test_index", "_type": "test_type", "_id": "1", "_version": 1, "found": true, "_source": { "test_content": "test test" }}----------------------------------------------...原创 2019-05-22 22:22:51 · 7325 阅读 · 0 评论 -
五 document _id生成的两种方式
1、手动指定document id(1)根据应用情况来说,是否满足手动指定document id的前提:一般来说,是从某些其他的系统中,导入一些数据到es时,会采取这种方式,就是使用系统中已有数据的唯一标识,作为es中document的id。举个例子,比如说,我们现在在开发一个电商网站,做搜索功能,或者是OA系统,做员工检索功能。这个时候,数据首先会在网站系统或者IT系统内部的数据库中,会...原创 2019-05-22 22:34:27 · 2422 阅读 · 0 评论 -
十 写一致性原理
一 综述在发送增删改操作的时候,可以带上一个consistency参数来指明写一致性是什么。put /index/type/id?consistency=quorum有三种写一致性:1. one:只要有一个primary shard是active活跃可用的,就可以执行。2. all:要求所有的primary shard和replica shard都是活跃的,才可以执行。3. q...原创 2019-06-19 17:39:14 · 363 阅读 · 0 评论 -
八 document路由原理
1 什么是document路由?一个index会被分为多个片(shard),一个document只能放在一个shard中。在客户端创建document的时候,ES就要决定document放在index的哪个shard上。这个过程称为document routing,即数据路由。2路由算法shard = hash(routing) % number_of_primary_shard...原创 2019-06-14 22:56:24 · 222 阅读 · 0 评论 -
九 document增删改原理
1 客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)2 coordinating node,对document进行路由,将请求转发给对应的node(primary shard)3 实际的node上的primary shard处理请求(增删改只能由primary shard进行),然后将数据同步到replica node。4 coordinat...原创 2019-06-14 23:07:07 · 130 阅读 · 0 评论 -
七 ES并发控制
当有多个线程同时操作ES数据时,可能造成ES数据错误,这个时候就需要进行并发控制。并发控制策略有两种:1. 悲观锁当一个线程操作数据时,就会对数据进行加锁,其它线程就不能修改数据,直到该线程完成数据操作并释放锁。2. 乐观锁乐观锁即无锁机制,可以使用cas方式来实现。ES采用乐观锁机制。我们可以看到,ES存储的数据还有version版本号,对ES的增、删、改都会涉及到...原创 2019-06-03 22:59:47 · 1773 阅读 · 0 评论 -
十一 读数据原理
ES读数据流程如下:1. 客户端发送请求到任意一个node,该node成为coordinate node。2. coordinate node对document进行路由(见八 document路由原理),将请求转发到对应的node,此时会使用round-robin随机轮询算法,在primary shard以及其所有replica中选择一个,让读请求负载均衡。3. 接收请求的node返回d...原创 2019-06-19 21:49:06 · 162 阅读 · 0 评论 -
十二 ES json数据格式
1. 可读性良好的json格式:[{ "action": { }, "data": { }}]2. bulk api的json格式{"action": {"meta"}}\n{"data"}\n{"action": {"meta"}}\n{"data"}\n例子:POST /forum/article/_bulk{ "index": { "...原创 2019-06-19 23:31:32 · 4119 阅读 · 0 评论 -
十三 search结果项解析说明
典型的查询结果如下:GET /_search{ "took": 6, "timed_out": false, "_shards": { "total": 6, "successful": 6, "failed": 0 }, "hits": { "total": 10, "max_score": 1, "hits": [...原创 2019-06-20 22:08:57 · 369 阅读 · 0 评论 -
二十九 document写入流程分析
一 document写入流程--第一版1. document写入流程:(1)document数据首先被写入内存buffer缓冲中。(2)执行commit操作,写commit point到磁盘。(3)buffer中的数据就会写入一个新的index segment。(4)等待在os cache中的index segment被fsync强制刷到磁盘上。(5)步骤(3)中的新index s...原创 2019-07-09 23:13:50 · 813 阅读 · 0 评论