自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 21.用function score自定义相关度分数算法

我们可以做到自定义一个function_score函数,自己将某个field的值,跟es内置算出来的分数进行运算,然后由自己指定的field来进行分数的增强给所有的帖子数据增加follower数量POST /forum/article/_bulk{ "update": { "_id": "1"} }{ "doc" : {"follower_num" : 5} }{ "upda...

2020-02-29 13:55:16 269

原创 20.四种常见的相关度分数优化方法

1、query-time boostGET /forum/article/_search{ "query": { "bool": { "should": [ { "match": { "title": { "query": "java spark", ...

2020-02-29 13:36:14 352

原创 19.Lucenne的相关度分数算法

1.lucene practical scoring functionpractical scoring function,来计算一个query对一个doc的分数的公式,该函数会使用一个公式来计算score(q,d) = queryNorm(q) · coord(q,d) · ∑ ( ...

2020-02-29 13:28:34 130

原创 55.内核原理探秘_最后优化写入流程实现海量磁盘文件合并(segment merge,optimize)

每秒一个segment file,文件过多,而且每次search都要搜索所有的segment,很耗时默认会在后台执行segment merge操作,在merge的时候,被标记为deleted的document也会被彻底物理删除每次merge操作的执行流程(1)选择一些有相似大小的segment,merge成一个大的segment(2)将新的segment flush到磁盘上去(3)写...

2020-02-27 17:14:24 194

转载 54.内核原理探秘_继续优化写入流程实现durability可靠存储(translog,flush)

1、优化的写入流程(1)数据写入buffer缓冲和translog日志文件(2)每隔一秒钟,buffer中的数据被写入新的segment file,并进入os cache,此时segment被打开并供search使用(3)buffer被清空(4)重复1~3,新的segment不断添加,buffer不断被清空,而translog中的数据不断累加(5)当translog长度达到一定程度的时...

2020-02-27 17:13:43 266

原创 53.内核原理探秘_优化写入流程实现NRT近实时(filesystem cache,refresh)

现有流程的问题,每次都必须等待fsync将segment刷入磁盘,才能将segment打开供search使用,这样的话,从一个document写入,到它可以被搜索,可能会超过1分钟!!!这就不是近实时的搜索了!!!主要瓶颈在于fsync实际发生磁盘IO写数据进磁盘,是很耗时的。写入流程别改进如下:(1)数据写入buffer(2)每隔一定时间,buffer中的数据被写入segment文件,...

2020-02-27 17:11:27 235

原创 52.内核原理探秘_深度剖析document写入原理(buffer,segment,commit)

1、document数据写入流程(1)数据写入buffer缓冲;(2)buffer缓冲区每隔一段时间(时间不固定)会 commit point ;(3)commit point 会将buffer中的数据提交到新的index sgment;(4)等待在os cache中的index segment被fsync强制刷到磁盘上(5)新的index sgement被打开,供search使用(...

2020-02-27 17:10:41 267

原创 51.内核原理探秘_倒排索引组成结构以及其索引不可变原因

倒排索引,是适合用于进行搜索的1、倒排索引的结构(1)包含这个关键词的document list(2)包含这个关键词的所有document的数量:IDF(inverse document frequency)(3)这个关键词在每个document中出现的次数:TF(term frequency)(4)这个关键词在这个document中的次序(5)每个document的长度:leng...

2020-02-27 17:10:07 313

原创 50.初识搜索引擎_基于scroll技术滚动搜索大量数据

1、什么是scoll如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完使用scoll滚动搜索,可以先搜索一批数据,然后下次再搜索一批数据,以此类推,直到搜索出全部的数据来scoll搜索会在第一次搜索的时候,保存一个当时的视图快照,之后只会基于该旧的视图快照提供数据搜索,如果这个期间数据变更,是不会让用户看到的...

2020-02-27 17:08:46 283

原创 49.初识搜索引擎_搜索相关参数梳理以及bouncing results问题解决方案

1、preference决定了哪些shard会被用来执行搜索操作_primary, _primary_first, _local, _only_node:xyz, _prefer_node:xyz, _shards:2,3bouncing results问题:两个document排序,field值相同,在不同的shard上,可能排序不同,每次请求轮询打到不同的replica shard上...

2020-02-27 17:06:08 135

原创 48.初识搜索引擎_分布式搜索引擎内核解密之query phase、分布式搜索引擎内核解密之fetch phase

1、query phase(1)搜索请求发送到某一个coordinate node,构构建一个priority queue,长度以paging操作from和size为准,默认为10(2)coordinate node将请求转发到所有shard,每个shard本地搜索,并构建一个本地的priority queue(3)各个shard将自己的priority queue返回给coordinat...

2020-02-27 16:54:50 163

原创 47.初识搜索引擎_内核级知识点之doc value初步探秘

搜索的时候,要依靠倒排索引;排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values在建立索引的时候,一方面会建立倒排索引,以供搜索用;一方面会建立正排索引,也就是doc values,以供排序,聚合,过滤等操作使用doc values是被保存在磁盘上的,此时如果内存足够,os会自动将其缓存在内存中,性能还是会...

2020-02-27 16:52:31 106

原创 46.初识搜索引擎_相关度评分TF&IDF算法解密

1、算法介绍relevance score算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度Elasticsearch使用的是term frequency/inverse document frequency算法,简称为TF/IDF算法。(1)Term frequency:搜索文本中的各个词条在field文本中出现了多少次,出现次数越多,就越相关例如:搜...

2020-02-25 09:18:03 240

原创 45.初识搜索引擎_如何将一个field索引两次来解决字符串排序问题

如果对一个string field进行排序,结果往往不准确,因为分词后是多个单词,再排序就不是我们想要的结果了。通常解决方案是,将一个string field建立两次索引,一个分词,用来进行搜索;一个不分词,用来进行排序。1、怎样将string field建立两次索引示例:给title建立两次索引PUT /website{ "mappings": { "articl...

2020-02-23 21:41:54 190

原创 44.初识搜索引擎_多搜索条件组合查询

1、多条件组合查询示例GET /website/article/_search{ "query": { "bool": { "must": [ { "match": { "title": "elasticsearch" } } ], "sho...

2020-02-23 21:38:08 469

原创 43.初识搜索引擎_常用的各种query搜索语法

1、match all 查询全部GET /_search{ "query": { "match_all": {} }}2、match 指定条件查询GET /_search{ "query": { "match": { "test_content": "automatic" } }}3、m...

2020-02-23 21:30:58 327

原创 42.初识搜索引擎_filter与query深入对比解密:相关度,性能

1、filter与query示例(1)创建测试用的document数据PUT /company/employee/2{ "address": { "country": "china", "province": "jiangsu", "city": "nanjing" }, "name": "tom", "age": 30, "join_...

2020-02-23 21:29:21 245

原创 41.初识搜索引擎_Query DSL搜索语法

1、什么是Query DSL搜索内容在{···}中的就是Query DSL搜索,如:GET /_search{ "query": { "match_all": {} }}2、Query DSL的基本语法(1)语法{ QUERY_NAME: { ARGUMENT: VALUE, ARGU...

2020-02-23 21:28:09 209

原创 40.初识搜索引擎_search api的基础语法介绍

1、search api的基本语法(1)基本语法GET /search{}(2)指定索引、类型查询语法,可以指定多个索引和类型,多个参数之间用逗号隔开GET /index1,index2/type1,type2/search{}(3)分页查询 from为当前页,size页大小GET /_search{ "from": 0, "siz...

2020-02-23 21:27:09 265

原创 39.初识搜索引擎_mapping复杂数据类型以及object类型数据底层结构大揭秘

1、multivalue field{ "tags": [ "tag1", "tag2" ]}建立索引时与string是一样的,数据类型不能混2、empty fieldnull,[],[null]3、object field举例有这样一条document数据,它在底层中的结构是怎样的呢?PUT /company/employee/1{...

2020-02-23 21:26:13 197

原创 38.初识搜索引擎_手动建立和修改mapping以及定制string类型数据是否分词

1、定制string类型数据是否分词属性index的值analyzed:设置该field可以进行分词。not_analyzed:设置该field不能进行分词,只能精确查询(exact value)no:不能作为查询field。2、手动建立mapping只能创建index时手动建立mapping,或者新增field mapping,但是不能修改field mapping(1)创建索引...

2020-02-23 21:25:02 236

原创 37.初识搜索引擎_mapping的核心数据类型以及dynamic mapping

1、核心的数据类型string / testbyte,short,integer,longfloat,doublebooleandate2、dynamic mappinges中默认自动转换的类型为:true or false --> boolean123 --> long123.45 --> double2017-01-01 --> date"...

2020-02-23 21:22:38 77

原创 36.初识搜索引擎_什么是mapping透彻理解小结

(1)往es里面直接插入数据,es会自动建立索引,同时建立type以及对应的mapping(2)mapping中就自动定义了每个field的数据类型(3)不同的数据类型(比如说text和date),可能有的是exact value,有的是full text(4)exact value在建立倒排索引的时候,分词的时候,是将整个值一起作为一个关键词建立到倒排索引中的;full text会经历各种...

2020-02-23 21:20:23 402

原创 35.初识搜索引擎_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,建立倒排索引什么时quer...

2020-02-20 23:34:00 134

原创 34.初识搜索引擎_分词器的内部组成到底是什么,以及内置分词器的介绍

1、什么是分词器切分词语,normalization(提升recall召回率)给你一段句子,然后将这段句子拆分成一个一个的单个的单词,同时对每个单词进行normalization(时态转换,单复数转换),分词器recall,召回率:搜索的时候,增加能够搜索到的结果的数量/character filter:在一段文本进行分词之前,先进行预处理,比如说最常见的就是,过滤html标签(<s...

2020-02-20 23:32:18 240

原创 33.初识搜索引擎_倒排索引核心原理快速揭秘

用一个例子解释倒排索引,对以下两句话进行检索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.1.分词,初步的倒排索引的建立...

2020-02-20 23:11:51 121

原创 32.初识搜索引擎_精确匹配与全文搜索的对比分析

1、精确匹配 exact value就是说比如值为2017-01-01,在使用exact value搜索的时候,必须输入2017-01-01,才能搜索出来如果你输入一个01,是搜索不出来的2、全文搜索 full text全文搜索支持搜索模式:(1)缩写 vs. 全程:cn vs. china(2)格式转化:like liked likes(3)大小写:Tom vs tom(4...

2020-02-20 17:00:34 278

原创 31.初识搜索引擎_用一个例子告诉你mapping到底是什么

1、首先插入几条数据PUT /website/article/1{ "post_date": "2017-01-01", "title": "my first article", "content": "this is my first article in this website", "author_id": 11400}PUT /website/artic...

2020-02-20 16:59:47 543

原创 30.初识搜索引擎_快速掌握query string search语法以及_all metadata原理

1、query string基础语法查询包含test_field:test的数据:GET /test_index/test_type/_search?q=test_field:test 或GET /test_index/test_type/_search?q=+test_field:test---------------------------------结果------------...

2020-02-20 16:58:39 349

原创 29.初识搜索引擎_分页搜索以及deep paging性能问题深度图解揭秘

1、如何使用Elasticsearch进行分页搜索的语法size:分页的页大小from:分页到第几页,从0开始为第一页语法:GET /_search?size=10GET /_search?size=10&from=0GET /_search?size=10&from=20举例:1、首先查询test_index/test_type中有几条数据,哪...

2020-02-20 16:57:10 374

原创 28.初识搜索引擎_multi-index&multi-type搜索模式解析以及搜索原理初步图解

1、multi-index和multi-type搜索模式如何一次性搜索多个index和多个type下的数据/_search:所有索引,所有type下的所有数据都搜索出来/index1/_search:指定一个index,搜索其下所有type的数据/index1,index2/_search:同时搜索两个index下的数据/*1,*2/_search:按照通配符去匹配多个索引/index1/ty...

2020-02-20 16:55:31 334

原创 27.初识搜索引擎_search结果深入解析(search timeout机制揭秘)

1、我们如果发出一个搜索请求的话,会拿到一堆搜索结果,这个搜索结果里的各种数据,都代表了什么含义。GET /_search----------------------------------结果----------------------------------{ "took": 6, "timed_out": false, "_shards": { "tota...

2020-02-20 16:52:04 401

原创 26.分布式文档系统_bulk api的奇特json格式与底层性能优化关系大揭秘

关于_bulk api的奇特设计格式,比如之前动手练习的,如:POST /_bulk{"delete":{"_index":"test_index","_type":"test_type","_id":"4"}}{"create":{"_index":"test_index","_type":"test_type","_id":"5"}}{"test_field1":"test ...

2020-02-20 16:46:55 279

原创 25.分布式文档系统_揭秘document查询内部原理

1、客户端发送请求到任意一个node,接收请求的node节点成为协调节点(coordinate node);2、协调节点(coordinate node)会对document进行路由,将请求转发到对应的node,此时会使用round-robin随机轮询算法,在primary shard以及其所有replica中随机选择一个,让其进行读请求,以达到负载均衡;3、接收请求的node返回docume...

2020-02-18 11:26:31 262

原创 24.分布式文档系统_写一致性原理以及quorum机制深入剖析

1、consistency参数,值one(primary shard),all(all shard),quorum(default)我们在发送任何一个增删改操作的时候,比如说put /index/type/id,都可以带上一个consistency参数,指明我们想要的写一致性是什么?put /index/type/id?consistency=quorumconsistency参数的值有三种,...

2020-02-18 10:56:19 245

原创 24.分布式文档系统_document增删改内部原理

假设有3个node,3个primary shard,replica = 1,也就是replica shard也是3个,总共有6个shard。document数据执行流程1、客户端创建一个document数据,然后任意选择node发送请求过去,此时被选中的node就被称作协调节点(coordinating node)2、协调节点(coordinating node)会对document进行...

2020-02-18 10:55:22 184

原创 23.分布式文档系统_深度图解剖析document数据路由原理

1、document路由到shard上是什么意思?我们知道一个index的数据会被分为多片,每片都在一个shard中,所以,一个document只能存放在一个shard中。当客户端创建document的时候,es此时就需要决定这个document是放在这个index的哪个shard上,这个过程,就称之为数据路由(document routing)。2、路由算法路由算法:shard =...

2020-02-16 23:47:18 222

原创 22.分布式文档系统_Elasticsearch分布式文档系统_什么是distributed document store

到目前为止,一个直观的感觉,好像已经知道了es是分布式的,包括一些基本的原理,然后花了不少时间在学习document本身相关的操作,增删改查。一句话点出来,给大家归纳总结一下,其实我们应该思考一下,es的一个最最核心的功能,已经被我们相对完整的讲完了。Elasticsearch在跑起来以后,其实起到的第一个最核心的功能,就是一个分布式的文档数据存储系统。ES是分布式的。文档数据存储系统。。文档...

2020-02-16 23:20:17 123

原创 21.分布式文档系统_Elasticsearch上机动手实战演练bulk批量增删改

1、有哪些类型的操作可以执行bulk批量增删改呢?(1)delete:删除一个文档,只要1个json串就可以了(2)create:PUT /index/type/id/_create,强制创建(3)index:普通的put操作,可以是创建文档,也可以是全量替换文档(4)update:执行的partial update操作2、语法及示例(1)bulk对json的语法,有严格的要求,...

2020-02-16 23:10:51 292

原创 20.分布式文档系统_Elasticsearch动手实战演练mget批量查询

1、批量查询的好处就是一条一条的查询,比如说要查询100条数据,那么就要发送100次网络请求,这个开销还是很大的如果进行批量查询的话,查询100条数据,就只要发送1次网络请求,网络请求的性能开销缩减100倍2、mget的语法(1)一条一条的查询,普通查询GET test_index/test_type/1---------------------------------...

2020-02-16 18:09:43 101

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除