![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
elasticsearch
白礼军
这个作者很懒,什么都没留下…
展开
-
索引管理_ mapping root object深入剖析
什么是 root object?就是某个 type 对应的 mapping json,包括了 properties,metadata(_id,_source,_type),settings(analyzer),其他settings(比如include_in_all)如下高亮部分,“my_type” 这个一个大 json 就叫做 root objectPUT my_index{ "ma...原创 2019-11-04 16:41:32 · 280 阅读 · 0 评论 -
索引管理_内核级知识点:深入探秘type底层数据结构
type,是一个index中用来区分类似的数据的,类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立、分词器field的value,在底层的lucene中建立索引的时候,全部是opaque bytes类型,不区分类型的lucene是没有type的概念的,在document中,实际上将type作为一个document的field来存储,即_type,es通过_type来进行...原创 2019-11-04 16:31:37 · 190 阅读 · 0 评论 -
索引管理_快速上机动手实战修改分词器以及定制自己的分词器
1、默认的分词器standardstandard tokenizer:以单词边界进行切分standard token filter:什么都不做lowercase token filter:将所有字母转换为小写stop token filer(默认被禁用):移除停用词,比如a the it等等2、修改分词器的设置启用english停用词token filterPUT /my_inde...原创 2019-11-04 16:28:34 · 219 阅读 · 0 评论 -
索引管理_快速上机动手实战创建、修改以及删除索引
1.为什么要手动创建索引?更加灵活2.创建索引例子:PUT /index0{ "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "mytype":{ "properties": { "myfield":{ ...原创 2019-11-04 16:24:28 · 119 阅读 · 0 评论 -
初识搜索引擎_上机动手实战基于scoll技术滚动搜索大量数据
如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询, 一批一批的查,直到所有数据都查询完处理完使用scoll滚动搜索,可以先搜索一批数据,然后下次再搜索一批数据,以此类推,真到搜索的全部的数据来,scoll搜索会在第二次搜索的时候,保存一个当时的视图快照,之后只会基于该旧的视图快照提供数据搜索,如果这个期间数据变更,是不会让用户看到的采用基于_ doc进行...原创 2019-11-04 16:21:44 · 145 阅读 · 0 评论 -
初识搜索引擎_搜索相关参数梳理以及bouncing results问题解决方案
1、preference决定了哪些shard会被用来执行搜索操作_primary, _primary_ first, _local, _only_ node:xyz ,_prefer_node:xyz , _shards:2,3bouncing results问题, 两个document排序, field值相同; 不同的shard上, 可能排序不同;每次请求轮询打到不同的replica sh...原创 2019-11-04 16:17:50 · 127 阅读 · 0 评论 -
初识搜索引擎分布式搜索引擎内核解密之fetch phase
1、fetch phbase.工作流程(1) coordinate. node构建完priority queue之后,就发送mget请求去所有shard上获取对应的document(2)各个shard将document返回给coordinate node .(3) coordinate node将合并后的document结果返回给client客户端I2、一般搜索,如果不加from和size...原创 2019-11-04 16:11:53 · 196 阅读 · 0 评论 -
初始搜索引擎_分布式搜索引擎内核解密之query phase
1、 query phase(1)搜索请求发送到某-个coordinate node,构构建一个priori ty queue,长度以paging操作from和size为准,默认为10(2) coordinate node将请求转发到所有shard,每个shard本地搜索,并构建一个本地的priority queue(3)各个shard将自己的pri ority queue返回给coordi...原创 2019-11-04 16:09:57 · 151 阅读 · 0 评论 -
Java 操作Elasticsearch Demo
环境:安装elasticsearch-6.2.4安装kibana-6.2.4安装ik分词器并将ik分词器解压到Elasticsearch目录的plugins目录中配置运行:第一步:进入Elasticsearch安装目录下的config目录,修改elasticsearch.yml文件.在文件的末尾加入以下代码:http.cors.enabled: true http.cors.allo...原创 2019-11-04 15:59:25 · 374 阅读 · 0 评论 -
初识搜索引擎_mapping核心数据以及dynamic mapping
1.核心的数据类型Stringbyte ,short integer,longfloat ,doublebooleandate2.dynamic mappingtrue or false -->boolean123 -->long123.56 -->double2019-08-09 -->date“hello word” ...原创 2019-09-15 12:53:42 · 101 阅读 · 0 评论 -
初识搜索引擎_手动建立和修改mapping 及 定制string类型数据是否分词
1.如何建立索引PUT website{ "mappings": { "article":{ "properties": { "author_id":{ "type": "long" }, "title":{ "type": "text", "analyzer":...原创 2019-09-15 14:30:56 · 122 阅读 · 0 评论 -
初识搜索引擎_mapping复杂数据类型以及object数据类型底层大揭秘
1.multivalue fieldPUT my_index/my_type/1{ "tags":[ "tag1","tag2" ]}建立索引与string是一样的,数据类型不能混。2、empty fieldnull , [] , [null]3、object fieldPUT company/employee/1{ "adress":{ "c...原创 2019-09-15 17:46:02 · 143 阅读 · 0 评论 -
初识搜索引擎_search api基础语法
1、search api的基本语法GET /search{}GET /index1,index2/type1,type2/search{}GET /_search{ "from": 0, "size": 10}2、http协议中get是否可以带上request body**HTTP协议,一般不允许get请求带上request body,但是因为get更加适合描...原创 2019-09-15 17:58:47 · 163 阅读 · 0 评论 -
初识搜索引擎_快速上机动手实践Query DSL搜索语法
1、一个例子让你明白什么是Query DSLGET /_search{ "query": { "match_all": {} }}2、Query DSL的基本语法{ QUERY_NAME: { ARGUMENT: VALUE, ARGUMENT: VALUE,... }}{ QUERY_N...原创 2019-09-15 18:22:17 · 98 阅读 · 0 评论 -
filter 与 query 深入对比解密:相关度、性能
filter与query实例先来插入几条数据PUT /company/employee/1{ "address":{ "country":"China", "province":"beijing", "city":"beijing" }, "name":"lily", "age":33, "join_date":"2014-05-20" ...原创 2019-09-18 14:23:56 · 233 阅读 · 0 评论 -
常用的各种 query 搜索语法
List itemmatch allmatchmulti matchrange queryterm queryterms queryexist querybool 中可以放那些语法只想用 filter_validate & explain默认排序规则定制排序规则match allGET /_search{ "query": { "m...原创 2019-09-18 16:21:17 · 1232 阅读 · 0 评论 -
初始搜索引擎 _相关度评分TF&IDF算法独家揭秘
1.算法介绍relevance score算法,简单来说,就是计算出一个索引中的文本,与搜索的文本,他们之间的关联匹配程序。elasticsearch 使用的是term frequery/inverse document frequency算法,简称TF/IDF算法。Term frequency,搜索文本中的各个词条在field文本中出现了多少次,出现的次数越多,就越相关。Inverse ...原创 2019-09-21 10:20:51 · 171 阅读 · 0 评论 -
初始搜索引擎_内核级知识点之doc value初步探秘
搜索的时候,要依靠倒排索引;排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values在建立索引的时候,一方面会建立倒排索引,以供搜索用;另一方面会建立正排索引,也就是doc values以供排序,过滤,聚合等操作。使用doc values会被保持在硬盘上的,此时如果内存足够,os会自动将其缓存在内存中,性能还是很高的,如果...原创 2019-09-21 10:54:04 · 199 阅读 · 0 评论 -
初识搜索引擎_什么是mapping再次回炉透彻理解
mapping:就是index的type的元数据,每个type都有自己的mapping,决定了数据类型,建立倒排索引的行为,还有进行搜索的行为。(1)往es里面直接插入数据,es会自动建立索引,同时建立type以及对应的mapping。(2)mapping中就自动定义了每个field的数据类型。(3)不同的数据类型(比如说,text和date),可能有的是exact value,有的是ful...原创 2019-09-15 12:38:46 · 315 阅读 · 0 评论 -
初识搜索引擎_query String的分词以及mapping引入案例遗留问题的大揭秘
1、query string分词query string必须以和index建立时相同的analyzer进行分词query string对exact value和full text的区别对待date:exact value_all:full text比如我们有一个document,其中有一个field,包含的value是:hello you and me,建立倒排索引我们要搜索这个d...原创 2019-09-15 00:53:11 · 183 阅读 · 0 评论 -
上机动手实战演练基于external_version进行乐观锁并发控制
external_version:es提供了一个feature,就是说,你可以不用它提供的_version版本进行并发控制可以基于自己维护的一个版本进行并发控制,举个例子,假如你的数据在mysql里也有一份,然后你的应用系统本身就维护了一个版本,无论是什么自己生成的,这个时候,你进行乐观锁并发控制的时候,可能不是想要用es内部的_version来进行控制,而是用你自己维护的那个version来进行...原创 2019-09-07 23:10:20 · 144 阅读 · 0 评论 -
图解partial update实现原理以及动手实战演练
1.什么是partial update?我们都知道如果要修改一条document,有两种方法,一种就是全量替换,直接对document重新建立索引,替换里面所有的内容。另一种就是partial update,要修改少数几个field即可,不需要全量替换数据。全量替换语法:PUT index/type/id //创建文档&替换文档都是一样的语法{ "filed":"test...原创 2019-09-08 21:45:51 · 661 阅读 · 0 评论 -
elasticsearch学习之mget批量查询api
1.批量查询的好处一条一条的查询,比如说查询100条数据,要发送100次网络请求,这个开销还是很大的,如果进行批量查询100天数据的话,只需要发送一次网络请求,网络请求性能开销直接减少100倍。2.mget的语法(1)如果查询的document是在不同的index,不同的type,不同的id中的话GET /_mget{ "docs":[ { "_index":"t...原创 2019-09-09 23:10:45 · 204 阅读 · 0 评论 -
elasticsearch bulk批量增删改(超详细)
一、bulk的操作类型1.1批量增语法一:index操作:可以是创建文档,也可以是全量替换文档(类似于普通的put操作)POST /_bulk {"index":{"_index":"test_index","_type":"test_type","_id":"12"}} {"score_num":86,"tags":"my love"}运行结果{ "took": 79, ...原创 2019-09-10 12:55:14 · 17253 阅读 · 2 评论 -
elasticsearch document 数据路由
一、介绍数据路由(routing):一个index的数据会被分为多片,每片都在一个shard中,所有,一个document只能存在于一个shard中,党创建document时,es需要决定讲index放在哪个shard上,这个过程就称为数据路由(document routing)二、路由算法:shard=hash(routing)%number_of_primary_shards每次操作...原创 2019-09-11 10:44:00 · 113 阅读 · 0 评论 -
深度图解剖析document 增删改内部实现原理
(1)客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)(2)coordinating node 对document进行路由,将请求转发给对应的node(有primary shard)( 3 ) 实际的node上的primary shard处于请求,并将数据同步到replica shard上(4)coordinating node如果发现pri...原创 2019-09-11 23:23:02 · 132 阅读 · 0 评论 -
图解写一致性原理以及 quorum 机制深入剖析
consistency写一致性我们在发送一条增删改操作的时候,比如说 PUT/index/type/id ,都可以带上一个consistency参数,指明我们想要的写一致性是什么?PUT /index/type/id?consistency=quorum有三个可选one (primary shard)要求我们这个写操作,只要有一个primary shard是active 活跃可用...原创 2019-09-12 11:14:53 · 409 阅读 · 0 评论 -
document 查询内部原理图解揭秘
document 查询内部原理图解揭秘1、客户端发送请求到任意一个node,成为协调节点(coordinate node)2、coordinate node对document 进行路由,讲请求转发到对应的node,此时会使用round_robin随机轮询算法,在primary shard以及所有的replica中随机选择一个,让读请求负载均衡。3、接受请求的node返回document给co...原创 2019-09-12 11:36:49 · 202 阅读 · 0 评论 -
bulk 奇特 json 与性能揭秘
bulk api 奇特的 json 格式复习,详细请查阅 bulk 批量增删改{"action": {"meta"}}\n{"data"}\n{"action": {"meta"}}\n{"data"}\nbulk中的每个操作都可能要转发到不同node的shard上执行如果采用标准的 json 格式[{ "action": { }, "data": { }}]...原创 2019-09-12 12:31:24 · 110 阅读 · 0 评论 -
初识搜索引擎_search结果深入解析(search timeout机制揭秘)
如果我们发出一个搜索请求,会得到一堆的结果,这里我们讲解这些搜索里的各个数据都代表什么含义GET test_index/test_type/_search运行结果{ "took": 240, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "f...原创 2019-09-13 22:04:29 · 246 阅读 · 0 评论 -
初识搜索引擎_multi-index&multi-type搜索模式解析以及搜索原理初步图解
1、multi-index和multi-type搜索模式GET /_search //所有的index,所有的type下的所有数据GET /test_index/_search //指定一个index,搜索其下的所有type数据GET /test_index,test_index2/_search //同时搜索2个index下的数据GET /test_*/_search //支持通配...原创 2019-09-13 23:03:38 · 204 阅读 · 0 评论 -
初识搜索引擎_分页搜索,以及deep_paging性能问题深度图解揭秘
1、如何使用es进行分页搜索的语法size,fromGET test_index/test_type/_search?size=10&from=0分页的上机实验GET test_index/test_type/_search运行结果{ "took": 7, "timed_out": false, "_shards": { "total": 5, ...原创 2019-09-14 09:51:46 · 133 阅读 · 0 评论 -
初识搜索引擎_快速掌握query String search语法以及all_matedata原理揭秘
1、query String 基础语法GET test_index/test_type/_search?q=test_field:test //搜索指定index下的type中字段必须包含test_field:test的数据GET test_index/test_type/_search?q=+test_field:test //搜索指定index下的type中字段必须包含test_field...原创 2019-09-14 11:05:16 · 240 阅读 · 0 评论 -
初识搜索引擎_用一个例子告诉你mapping到底是什么?
插入几条数据,让es自动为我们建立索引PUT website/article/1{ "post_date":"2019-09-1", "title":"my first article", "content":"this my first article in this website", "author_id":"11400" }PUT website/articl...原创 2019-09-14 21:46:39 · 426 阅读 · 0 评论 -
初识搜索引擎_精准匹配与全文搜索的对比分析
1、exact value2019-01-01 ,exact value,搜索的时候必须输入2019-01-01,才能搜索出来,如果你输入一个01,是搜索不出来的。2、full text(1)缩写vs全称:cn vs china( 2 )格式转化:like liked likes(3)大小写:Tom vs tom( 4 )同义词:like vs love...原创 2019-09-14 21:48:15 · 299 阅读 · 0 评论 -
初识搜索引擎_倒排索引核心原理快速揭秘
doc1:I really liked my small dogs, and I think my mom also liked them.doc2:He never liked any dogs, so I hope that my mom will not expect me to liked him.分词,初步的倒排索引的建立word doc1 ...原创 2019-09-14 22:21:27 · 69 阅读 · 0 评论 -
图解Elasticsearch内部如何基于_version进行乐观锁并发控制
_version元数据:第一次创建一个document的时候,它的_version内部版本号就是1;以后每次对这个document执行修改或者删除的时候,都会对这个_version版本号自动加1,哪怕是删除操作,也会对这条数据的版本号加1.创建一个document:PUT test_index/test_type/1{ "test_field":"test1"}运行结果:{ ...原创 2019-09-07 19:29:20 · 153 阅读 · 0 评论