ElasticSearch最佳入门实践
文章平均质量分 56
代码量不够
词汇量不多
展开
-
ElasticSearch最佳入门实践(七十三)Java 实战 - 对员工信息进行聚合分析
构建数据client.prepareIndex("company", "employee", "1") .setSource(XContentFactory.jsonBuilder() .startObject() .field("name", "jack") ...原创 2018-11-18 14:18:28 · 376 阅读 · 0 评论 -
ElasticSearch最佳入门实践(五十七)分布式搜索引擎内核解密之fetch phase
1、fetch phbase工作流程(1)coordinate node构建完priority queue之后,就发送mget请求去所有shard上获取对应的document(2)各个shard将document返回给coordinate node(3)coordinate node将合并后的document结果返回给client客户端2、一般搜索,如果不加from和size...原创 2018-11-15 21:21:04 · 425 阅读 · 0 评论 -
ElasticSearch最佳入门实践(五十六)分布式搜索引擎内核解密之query phase
1、query phase(1)搜索请求发送到某一个coordinate node,构构建一个priority queue,长度以paging操作from和size为准,默认为10(2)coordinate node将请求转发到所有shard,每个shard本地搜索,并构建一个本地的priority queue(3)各个shard将自己的priority queue返回给coord...原创 2018-11-15 21:12:31 · 217 阅读 · 0 评论 -
ElasticSearch最佳入门实践(五十五)内核级知识点之 doc value 初步探秘
搜索的时候,要依靠倒排索引;排序的时候,需要依靠正排索引,看到每个document的每个field,然后进行排序,所谓的正排索引,其实就是doc values在建立索引的时候,一方面会建立倒排索引,以供搜索用;一方面会建立正排索引,也就是doc values,以供排序,聚合,过滤等操作使用doc values是被保存在磁盘上的,此时如果内存足够,os会自动将其缓存在内存中,性能还是会...原创 2018-11-15 15:35:44 · 263 阅读 · 0 评论 -
ElasticSearch最佳入门实践(五十四)相关度评分 TF & IDF 算法解密
1、算法介绍relevance score算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度Elasticsearch使用的是 term frequency / inverse document frequency算法,简称为TF/IDF算法Term frequency:搜索文本中的各个词条在field文本中出现了多少次,出现次数越多,就越相关搜索请...原创 2018-11-15 15:20:07 · 817 阅读 · 0 评论 -
ElasticSearch最佳入门实践(五十三)如何将一个field索引两次来解决字符串排序问题
如果对一个string field进行排序,结果往往不准确,因为分词后是多个单词,再排序就不是我们想要的结果了通常解决方案是,将一个string field建立两次索引,一个分词,用来进行搜索;一个不分词,用来进行排序新增数据并查询...原创 2018-11-15 14:52:04 · 280 阅读 · 0 评论 -
ElasticSearch最佳入门实践(四十九)各种query搜索语法
1、match all查询所有GET /_search{ "query": { "match_all": {} }}2、match匹配某一个filed是否包含文本GET /_search{ "query": { "match": { "title": "my elasticsearch article" }}}3、mu原创 2018-11-13 15:26:33 · 1738 阅读 · 0 评论 -
ElasticSearch最佳入门实践(四十八)_filter与query深入对比解密:相关度,性能
1、filter 与 query 示例先构建两条数据搜索请求:年龄必须大于等于30,同时join_date必须是2018-01-012、filter与query对比大解密filter,仅仅只是按照搜索条件过滤出需要的数据而已,不计算任何相关度分数,对相关度没有任何影响query,会去计算每个document相对于搜索条件的相关度,并按照相关度进行排序一般来说,如果你是...原创 2018-11-13 15:14:11 · 360 阅读 · 0 评论 -
ElasticSearch最佳入门实践(四十七)query DSL搜索语法
1、一个例子让你明白什么是Query DSLGET /_search{ "query": { "match_all": {} }}2、Query DSL的基本语法{ QUERY_NAME: { ARGUMENT: VALUE, ARGUMENT: VALUE,... }}{ QUERY_NAM...原创 2018-11-13 15:02:17 · 419 阅读 · 0 评论 -
ElasticSearch最佳入门实践(四十六)_search api的基础语法介绍
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更加适合描述查询数...原创 2018-11-13 14:55:38 · 260 阅读 · 0 评论 -
ElasticSearch最佳入门实践(四十五)_mapping复杂数据类型以及object类型数据底层结构大揭秘
1、multivalue field{ “tags”: [ “tag1”, “tag2” ]}建立索引时与string是一样的,重点是数据类型不能混,只能保持一致2、empty fieldnull,[],[null]3、object fieldaddress:object类型在object类型在 es 底层会变成这样{“name”: [su...原创 2018-11-13 14:40:52 · 555 阅读 · 0 评论 -
ElasticSearch最佳入门实践(四十四)手动建立和修改mapping以及定制string类型数据是否分词
1原创 2018-11-13 11:58:43 · 543 阅读 · 0 评论 -
ElasticSearch最佳入门实践(四十三)mapping 的核心数据类型以及 dynamic mapping
1、核心的数据类型stringbyte,short,integer,longfloat,doublebooleandate2、dynamic mappingtrue or false --> boolean123 --> long123.45 --> double2017-01-01 --> date“hello world” --> ..原创 2018-11-07 10:39:12 · 184 阅读 · 0 评论 -
ElasticSearch最佳入门实践(四十二)什么是mapping再次回炉透彻理解
(1)往es里面直接插入数据,es会自动建立索引,同时建立type以及对应的mapping(2)mapping中就自动定义了每个field的数据类型(3)不同的数据类型(比如说text和date),可能有的是exact value,有的是full text(4)exact value,在建立倒排索引的时候,分词的时候,是将整个值一起作为一个关键词建立到倒排索引中的;full text,会经历...原创 2018-11-07 10:37:07 · 401 阅读 · 0 评论 -
ElasticSearch最佳入门实践(四十一)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,建立倒排索引我们要搜索这个...原创 2018-11-07 10:25:33 · 283 阅读 · 0 评论 -
ElasticSearch最佳入门实践(二十)基于_version进行乐观锁并发控制
1、先创建一条数据2、开启2个客户端3、对某一条数据修改,并带上版本号同时带上数据的版本号,确保说,es中的数据的版本号,跟客户端中的数据的版本号是相同的,才能修改4、另外一个客户端,尝试基于version=1的数据去进行修改,同样带上version版本号,进行乐观锁的并发控制这个时候报错了5、在乐观锁成功阻止并发问题之后,重新获取并尝试正确的完成更新6、基于最新的...原创 2018-11-02 20:33:07 · 250 阅读 · 0 评论 -
ElasticSearch最佳入门实践(十九)Elasticsearch内部如何基于_version进行乐观锁并发控制
1原创 2018-11-02 20:06:25 · 585 阅读 · 0 评论 -
ElasticSearch最佳入门实践(五十八)搜索相关参数梳理以及bouncing results问题解决方案
1、preference决定了哪些shard会被用来执行搜索操作_primary, _primary_first, _local, _only_node:xyz, _prefer_node:xyz, _shards:2,3bouncing results问题,两个document排序,field值相同;不同的shard上,可能排序不同;每次请求轮询打到不同的replica shar...原创 2018-11-15 21:41:12 · 690 阅读 · 0 评论 -
ElasticSearch最佳入门实践(五十九)基于scoll技术滚动搜索大量数据
如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完使用scoll滚动搜索,可以先搜索一批数据,然后下次再搜索一批数据,以此类推,直到搜索出全部的数据来scoll搜索会在第一次搜索的时候,保存一个当时的视图快照,之后只会基于该旧的视图快照提供数据搜索,如果这个期间数据变更,是不会让用户看到的。采用基于_doc进...原创 2018-11-15 22:01:32 · 179 阅读 · 0 评论 -
ElasticSearch最佳入门实践(七十二)Java 实战 - 对员工信息进行复杂的搜索操作
需求:(1)搜索职位中包含technique的员工(2)同时要求age在30到40岁之间(3)分页查询,查找第一页1、构建员工信息public class EmployeeSearchApp { public static void main(String[] args) throws Exception { Settings settings = Sett...原创 2018-11-18 13:23:00 · 247 阅读 · 0 评论 -
ElasticSearch最佳入门实践(七十一)Java 实战 - 员工增删改查
1、新建一个maven项目2、创建员工信息3、获取员工信息4、更新员工信息4、删除员工信息原创 2018-11-17 22:48:06 · 1018 阅读 · 0 评论 -
ElasticSearch最佳入门实践(七十)优化写入流程实现海量磁盘文件合并(segment merge,optimize)
每秒一个segment file,文件过多,而且每次search都要搜索所有的segment,很耗时默认会在后台执行segment merge操作,在merge的时候,被标记为deleted的document也会被彻底物理删除每次merge操作的执行流程(1)选择一些有相似大小的segment,merge成一个大的segment(2)将新的segment flush到磁盘上去(...原创 2018-11-17 15:00:37 · 1030 阅读 · 0 评论 -
ElasticSearch最佳入门实践(六十九)优化写入流程实现durability可靠存储(translog,flush)
(1)数据写入buffer缓冲和translog日志文件(2)每隔一秒钟,buffer中的数据被写入新的segment file,并进入os cache,此时segment被打开并供search使用(3)buffer被清空(4)重复1~3,新的segment不断添加,buffer不断被清空,而translog中的数据不断累加(5)当translog长度达到一定程度的时候,commit操作...原创 2018-11-17 14:58:12 · 2291 阅读 · 0 评论 -
ElasticSearch最佳入门实践(六十八)优化写入流程实现NRT近实时(filesystem cache,refresh)
现有流程的问题,每次都必须等待fsync将segment刷入磁盘,才能将segment打开供search使用,这样的话,从一个document写入,到它可以被搜索,可能会超过1分钟!!!这就不是近实时的搜索了!!!主要瓶颈在于fsync实际发生磁盘IO写数据进磁盘,是很耗时的。写入流程别改进如下:(1)数据写入buffer(2)每隔一定时间,buffer中的数据被写入segment文件...原创 2018-11-17 14:52:42 · 3220 阅读 · 0 评论 -
ElasticSearch最佳入门实践(六十七)document写入原理(buffer,segment,commit)
(1)数据写入buffer(2)commit point(3)buffer中的数据写入新的index segment(4)等待在os cache中的index segment被fsync强制刷到磁盘上(5)新的index sgement被打开,供search使用(6)buffer被清空每次commit point时,会有一个.del文件,标记了哪些segment中的哪些docu...原创 2018-11-17 14:49:12 · 412 阅读 · 0 评论 -
ElasticSearch最佳入门实践(六十六)倒排索引组成结构以及其索引可变原因
倒排索引,是适合用于进行搜索的倒排索引的结构(1)包含这个关键词的document list(2)包含这个关键词的所有document的数量:IDF(inverse document frequency)(3)这个关键词在每个document中出现的次数:TF(term frequency)(4)这个关键词在这个document中的次序(5)每个document的长度:length ...原创 2018-11-17 14:45:13 · 214 阅读 · 0 评论 -
ElasticSearch最佳入门实践(六十五)基于scoll+bulk+索引别名实现零停机重建索引
1、重建索引一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index中批量查询的时候,建议采用scroll api,并且采用多线程并发的方式来reindex数据,每次scoll就查询指定日期的一段数据,交给一个线程即可(1)一开始,依靠dynamic mappi...原创 2018-11-17 13:48:13 · 290 阅读 · 0 评论 -
ElasticSearch最佳入门实践(六十四)索引管理_定制化自己的dynamic mapping
1、定制dynamic策略true:遇到陌生字段,就进行dynamic mappingfalse:遇到陌生字段,就忽略strict:遇到陌生字段,就报错定制PUT /my_index{ "mappings": { "my_type": { "dynamic": "strict", "properties": { "title&q原创 2018-11-17 13:36:00 · 292 阅读 · 0 评论 -
ElasticSearch最佳入门实践(六十三)索引管理_mapping root object
1、root object就是某个type对应的mapping json,包括了properties,metadata(_id,_source,_type),settings(analyzer),其他settings(比如include_in_all)PUT /my_index{ "mappings": { "my_type": { "properties": {...原创 2018-11-17 13:24:00 · 225 阅读 · 0 评论 -
ElasticSearch最佳入门实践(五十二)定制搜索结果的排序规则
1、默认排序规则默认情况下,是按照_score降序排序的然而,某些情况下,可能没有有用的_score,比如说filterGET /_search{ "query" : { "bool" : { "filter" : { "term" : { "author_id" ...原创 2018-11-14 16:48:28 · 405 阅读 · 0 评论 -
ElasticSearch最佳入门实践(五十一)定位不合法的搜索以及其原因
1、故意把 match 写成 math也可以一般用在那种特别复杂庞大的搜索下,比如你一下子写了上百行的搜索,这个时候可以先用validate api去验证一下,搜索是否合法...原创 2018-11-14 16:39:29 · 144 阅读 · 0 评论 -
ElasticSearch最佳入门实践(五十)组合查询
1、例子GET /website/article/_search{ "query": { "bool": { "must": [ { "match": { "title": "elasticsearch" } } ], "should原创 2018-11-14 16:26:06 · 194 阅读 · 0 评论 -
ElasticSearch最佳入门实践(六十二)type底层数据结构
type,是一个index中用来区分类似的数据的,类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立、分词器field的value,在底层的lucene中建立索引的时候,全部是opaque bytes类型,不区分类型的lucene是没有type的概念的,在document中,实际上将type作为一个document的field来存储,即_type,es通过_type...原创 2018-11-15 23:18:32 · 468 阅读 · 0 评论 -
ElasticSearch最佳入门实践(六十一)修改分词器以及定制自己的分词器
1、默认的分词器standard其余:standard tokenizer:以单词边界进行切分standard token filter:什么都不做lowercase token filter:将所有字母转换为小写stop token filer(默认被禁用):移除停用词,比如a the it等等2、基于英语的过滤器修改分词器的设置启用english停用词token f...原创 2018-11-15 22:57:01 · 2459 阅读 · 1 评论 -
ElasticSearch最佳入门实践(六十)创建、修改以及删除索引
1、创建索引创建索引的语法PUT /my_index{ "settings": { ... any settings ... }, "mappings": { "type_one": { ... any mappings ... }, "type_two": { ... any mappings ... }, ... ...原创 2018-11-15 22:47:27 · 438 阅读 · 0 评论 -
ElasticSearch最佳入门实践(十六)_document的全量替换、强制创建以及 lazy delete 机制
1、document的全量替换(1)语法与创建文档是一样的,如果document id不存在,那么就是创建;如果document id已经存在,那么就是全量替换操作,替换document的json串内容(2)document是不可变的,如果要修改document的内容,第一种方式就是全量替换,直接对document重新建立索引,替换里面所有的内容(3)es会将老的document标记为de...原创 2018-11-02 19:51:25 · 332 阅读 · 0 评论 -
ElasticSearch最佳入门实践(十七)剖析Elasticsearch并发冲突问题
1、场景电商场景下,有个程序的工作流程1、读取商品信息(商品信息中包含库存)2、用户下单购买3、更新商品信息(更新库存信息)2、操作现在有多个用户同时操作,多个线程同时并发去执行上面的3个步骤用户A获取到库存100件用户B获取到库存100件然后两个用户同时提交订单,但是总有一个线程是先到的,如果线程A先到,就会先将库存 -1 设置为99件。然后线程B再次将库存设置为 99 ...原创 2018-11-02 19:50:12 · 290 阅读 · 0 评论 -
ElasticSearch最佳入门实践(十八)剖析悲观锁与乐观锁两种并发控制方案
1、悲观锁常见于关系型数据库,比如mysql商品库存100件。当用户A读取牙膏数据的时候,会同时给数据库这一行加锁,而当用户B也读取牙膏数据的时候,这个时候会被卡出处于等待状态。只有当用户A购买商品后 库存-1 ,才会释放锁。此时用户B突然就可以动弹了,这个时候获取到的商品库存为 99 件,当用户B购买商品后,库存变为 98。悲观锁的控制方案就是在任何情况下,都上锁,上锁之后只有一...原创 2018-11-02 19:49:44 · 474 阅读 · 0 评论 -
ElasticSearch最佳入门实践(三十)写一致性原理以及quorum机制深入剖析
1、consistency,one(primary shard),all(all shard),quorum(default)我们在发送任何一个增删改操作的时候,比如说put /index/type/id,都可以带上一个consistency参数,指明我们想要的写一致性是什么?put /index/type/id?consistency=quorumone:要求我们这个写操作,只要有一...原创 2018-11-06 17:51:14 · 718 阅读 · 0 评论 -
ElasticSearch最佳入门实践(二十五)mget批量查询api
1、批量查询的好处就是一条一条的查询,比如说要查询100条数据,那么就要发送100次网络请求,这个开销还是很大的如果进行批量查询的话,查询100条数据,就只要发送1次网络请求,网络请求的性能开销缩减100倍2、mget的语法可以说mget是很重要的,一般来说,在进行查询的时候,如果一次性要查询多条数据的话,那么一定要用batch批量操作的api尽可能减少网络开销次数,可能可以将性能...原创 2018-11-04 00:10:03 · 736 阅读 · 0 评论