
【G】ElasticSearch
文章平均质量分 71
记录在搜索领域的所学知识
|旧市拾荒|
三年工作经验,任职于某银行科技部门,从事后端开发与数据开发。
展开
-
ElasticSearch7.3学习(三十四)----生产环境集群部署总结
客户端结点:client 节点仅作为请求客户端存在,client的作用也作为负载均衡器,client 节点不存数据,只是将请求均衡转发到其它结点。主结点:master节点主要用于集群的管理及索引 比如新增结点、分片分配、索引的新增和删除等。数据结点:data 节点上保存了数据分片,它负责索引和搜索操作。在elasticsearch.yml文件最后添加配置即可。原创 2022-09-21 22:38:39 · 178 阅读 · 0 评论 -
ElasticSearch7.3学习(三十三)----kibana之Grok Dubugger
中学到logstash使用filter插件进行数据清洗,grok是一个十分强大的logstash filter插件,他可以通过正则解析任意文本,将非结构化日志数据弄成结构化和方便查询的结构。他是目前logstash 中解析非结构化日志数据最好的方式。但是在运用过程中不可能在生产上进行测试,需要一个测试工具来判断grok语法是否正确。原创 2022-09-21 22:37:32 · 1139 阅读 · 0 评论 -
ElasticSearch7.3学习(三十二)----logstash三大插件(input、filter、output)及其综合示例
logstash支持很多数据源,比如说等等图片上面只是一少部分。Logstash 可以帮利用它自己的Filter帮我们对数据进行解析,丰富,转换等下面简单的介绍几个常用的。原创 2022-09-21 22:36:32 · 1248 阅读 · 0 评论 -
ElasticSearch7.3学习(三十一)----Logstash基础学习
Logstash 是一个功能强大的工具,可与各种部署集成。它提供了大量插件,可帮助你解析,丰富,转换和缓冲来自各种来源的数据(文件、数据库......)。logstash简单来说就是一个数据抽取工具,将数据从一个地方转移到另一个地方。Logstash 是 Elastic 栈非常重要的一部分,但是它不仅仅为 Elasticsearch 所使用。它可以介绍广泛的各种数据源。Logstash 可以帮利用它自己的Filter帮我们对数据进行解析,丰富,转换等。原创 2022-09-20 21:45:12 · 899 阅读 · 0 评论 -
ElasticSearch7.3学习(三十)----ES7.X SQL新特性解析及使用Java api实现sql功能
如果要使用代码实现sql功能,对于ES来说就要收费了。既然支持sql语句,那么底层是怎么运行的呢?实际上还是转换成query语句来执行,我们可以用。也可以与其他查询语句相结合使用,例如说,查询价格在1200~2000范围内的数据。,这个是控制返回结果为txt格式,当然也支持其他的格式。kibana中管理 ==> 许可管理 ==> 开启白金版试用。建立价格、颜色、品牌、售卖日期 四个字段。可以简单的看下其他的格式,例如说。即可查询到ES中所有的索引。上面的ES语句中可以看到。双击执行,在控制台输入。原创 2022-09-20 21:44:20 · 578 阅读 · 0 评论 -
ElasticSearch7.3学习(二十九)----聚合实战之使用Java api实现电视案例
建立价格、颜色、品牌、售卖日期字段。原创 2022-09-18 17:07:11 · 401 阅读 · 0 评论 -
ElasticSearch7.3学习(二十八)----聚合实战之电视案例
interval:2000,划分范围,左闭右开区间 ,[0~2000),2000~4000,4000~6000,6000~8000,8000~10000。这个第二个aggs内部,同样取个名字,执行一个metric操作,avg,对之前的每个bucket中的数据的指定的field,求一个平均值。bucket有了之后,一样的,去对每个bucket执行avg,count,sum,max,min,等各种metric操作,聚合分析。注意:因为是最近的时间,所以读者实验的时候,需根据当前时间来自行设置查询范围。原创 2022-09-18 17:05:09 · 822 阅读 · 0 评论 -
ElasticSearch7.3学习(二十七)----聚合概念(bucket和metric)及其示例
有如下数据划分出来两个bucket,一个是北京bucket,一个是天津bucket北京bucket:包含了2个人,张三,李四上海bucket:包含了3个人,王五,赵六,王麻子metric,就是对一个bucket执行的某种聚合分析的操作,比如说求平均值,求最大值,求最小值比如下面的一个sql语句bucket:group by studymodel --> 那些studymodel相同的数据,就会被划分到一个bucket中metric:count(*),对每个bucket中所有的数据,计算一个数量。例如a原创 2022-09-17 23:39:44 · 467 阅读 · 0 评论 -
ElasticSearch7.3学习(二十六)----搜索(Search)参数总结、结果跳跃(bouncing results)问题解析
计算分值使用的词频和文档频率等信息都是基于自己分片的数据进行的, 而 ES 进行整体排名是基于每个分片计算后的分值进行排序的(相当于打分依据就不一样, 最终对这些数据统一排名的时候就不准确了), 这就可能会导致排名不准确的问题。如果有两份文档拥有相同的timestamp,因为搜索请求是以一种循环(round-robin)的方式被可用的分片拷贝进行处理的,因此这两份文档的返回顺序可能因为处理的分片不一样而不同,比如主分片处理的顺序和副本分片处理的顺序就可能不一样。每次页面上看到的搜索结果的排序都不一样。原创 2022-09-17 23:38:49 · 678 阅读 · 2 评论 -
ElasticSearch7.3学习(二十五)----Doc value、query phase、fetch phase解析
一次请求要打到所有shard的一个replica/primary上去,如果每个shard都有多个replica,那么同时并发过来的搜索请求可以同时打到其他的replica上去。(1)搜索请求发送到某一个coordinate node,构构建一个priority queue,长度以paging操作from和size为准,默认为10。(2)coordinate node将请求转发到所有shard,每个shard本地搜索,并构建一个本地的priority queue。,以供排序,聚合,过滤等操作使用,原创 2022-09-16 23:13:03 · 151 阅读 · 0 评论 -
ElasticSearch7.3学习(二十四)----相关度评分机制详解
relevance score(相关性分数) 算法,简单来说,就是计算出,一个索引中的文本,与搜索文本,他们之间的关联匹配程度。Elasticsearch使用的是 term frequency/inverse document frequency算法,简称为TF/IDF算法。TF词频(Term Frequency),IDF逆向文件频率(Inverse Document Frequency)搜索文本中的各个词条在field文本中出现了多少次,出现次数越多,就越相关。数学公司并不重要,看下面例子就清楚了。原创 2022-09-16 23:10:56 · 923 阅读 · 0 评论 -
ElasticSearch7.3学习(二十三)----RestHighLevelClient Java api实现match_all、multi_match、bool等不同的搜索方式
在实际的应用过程要注意灵活变通,搜索方式方法不要一成不变,要思考为什么这种方式能够搜索出来结果,还要思考搜索结果的正确与否在上面的学习过程中,应该也能发现规律,Java代码中构建搜索请求与rest 风格的语法及其类似,包括其搜索方式、代码层级。所以在实际应用中,要先在kibana中完善搜索代码,只要kibana中能够搜索出来,Java代码一般来说也能行,这样能够缩短代码调试的时间。原创 2022-09-14 10:10:49 · 555 阅读 · 0 评论 -
ElasticSearch7.3学习(二十二)----Text字段排序、Scroll分批查询场景解析
scoll搜索会在第一次搜索的时候,保存一个当时的视图快照,之后只会基于该旧的视图快照提供数据搜索,如果这个期间数据变更,是不会让用户看到的。因为文档入倒排索引表时,分词存入,es无法知道此字段的真实值。这样的结果往往不准确,因为分词后是多个单词,再排序就不是我们想要的结果了。可以看到获取到了第一条的数据,获得的结果里面包含有一个scoll_id,下一次再发送scoll请求的时候,必须带上这个scoll_id,接下来获取第二条数据。结果是以分词后的第一个单词进行排序,排序结果不准确,所以不推荐使用。原创 2022-09-14 10:07:45 · 1657 阅读 · 0 评论 -
ElasticSearch7.3学习(二十一)----Filter与Query对比、使用explain关键字分析语法
filter,不需要计算相关度分数,不需要按照相关度分数进行排序,同时还有内置的自动cache最常使用filter的数据。在实际的应用过程中,需要查询的逻辑一般比较复杂,那当语句冗长的时候,这时候显然不太可能通过直接执行语句来调试语法正确与否,这个时候就可以通过explain来验证语句的正确性。说明在使用query查询的过程中,影响到了相关度(score)的排序,在使用filter进行查询,并不会影响相关度(score)的计算。query,相反,要计算相关度分数,按照分数进行排序,而且无法cache结果。原创 2022-09-11 22:38:51 · 560 阅读 · 0 评论 -
ElasticSearch7.3学习(二十)----采用restful风格查询详解
对于上面的搜索结果来进行一个简单的结果分析1、建立索引时, description字段 term 倒排索引关键词文档java2,3程序员32、搜索时,直接找description中含有java的文档 2,3,并且3号文档含有两个java字段,一个程序员,所以得分高,排在前面。2号文档含有一个java,排在后面。这里只是简单的介绍一下_score这个字段的作用,更详细的后续会介绍。原创 2022-09-11 22:37:07 · 1069 阅读 · 0 评论 -
ElasticSearch7.3学习(十九)---- deep paging
因为每次搜索的关键词是不同的,所有的score在每个shard中是呈现出完全不一样的分布。2消耗内存,各 shard 要把数据传送给 coordinate node,这个传递回来的数据,是被 coordinate node 保存在内存中的,这样会大量消耗内存。我们比较容易想到,我们每个节点都取第9990页的10条数据,在把三个shard总共30条数据在排序取前10条。首先每个shard都会将10000条数据给协调节点,协调节点在内存中再排序,拿出我们想要的10条数据,然后在返回给客户端。原创 2022-09-09 22:57:02 · 272 阅读 · 0 评论 -
ElasticSearch7.3学习(十八)----多索引搜索
直接可以搜索所有的field,任意一个field包含指定的关键字就可以搜索出来。我们在进行中搜索的时候,难道是对document中的每一个field都进行一次搜索吗?建立索引的时候,插入一条docunment,es会将所有的field值经行全量分词,把这些分词,放到。all field中。在搜索的时候,没有指定field,就在_all搜索。多索引搜索就是一次性搜索多个index下的数据。应用场景:生产环境log索引可以按照日期分开。原创 2022-09-09 22:56:06 · 5068 阅读 · 0 评论 -
ElasticSearch7.3学习(十七)----搜索结果字段解析及time_out字段解析
两个节点上都存在1亿条数据,假如说搜索10条,只需要10ms,这样对前端没啥影响,但是数据量太大时,搜索1个分片都需要10分钟的话,而且ES搜索的请求是每个。hits.max_score:score的含义,就是document对于一个search的相关度的匹配分数,越相关,就越匹配,分数也高。took:took表示Elasticsearch执行搜索所用的时间,单位是毫秒。_shards:指示搜索了多少分片,成功几个,跳过几个,失败几个。例如下图所示:存在一个book索引,2个分片,0副本。原创 2022-09-08 22:48:56 · 848 阅读 · 0 评论 -
ElasticSearch7.3学习(十六)----RestHighLevelClient Java api实现索引的创建、删除、是否存在、关闭、开启
注意:导入的包区别,不同的包创建索引的方式不同。博主亲身实践,具体体现在createIndexRequest.mapping()里面。读者可自行试验。可以看到上述两种方式导入的包的子类名是相同的,但是具体对索引的操作方式可能是不同的。具体的区别博主暂时还不清楚,后续若有进展再在此处更新。原创 2022-09-08 22:48:10 · 2935 阅读 · 0 评论 -
ElasticSearch7.3学习(十五)----中文分词器(IK Analyzer)及自定义词库
每年都会涌现一些特殊的流行词,内卷,耗子尾汁,不讲武德等,这些词一般不会出现在ik的原生词典里,分词的时候也不会把这些词汇当作整个词汇来进行分词。所以需要我们自己补充自己的最新的词语,到ik的词库里面。原创 2022-09-07 19:02:04 · 3306 阅读 · 0 评论 -
ElasticSearch7.3学习(十四)----生产环境实时重建索引
在实际的生产环境中,一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index中。批量查询的时候,建议采用scroll api,并且采用多线程并发的方式来reindex数据。例如说每次scoll就查询指定日期的一段数据,交给一个线程即可。原创 2022-09-07 19:00:32 · 452 阅读 · 0 评论 -
ElasticSearch7.3学习(十三)----定制动态映射(dynamic mapping)
true:默认值。动态添加字段。false:新检测到的字段将被忽略。这些字段将不会被索引,因此将无法搜索,但仍将出现在返回点击的源字段中。这些字段不会添加到映射中,必须显式添加新字段。strict:如果碰到陌生字段,抛出异常原创 2022-09-06 20:48:12 · 1272 阅读 · 0 评论 -
ElasticSearch7.3学习(十二)----type底层结构及弃用原因
一个index中的多个type,实际上是放在一起存储的,因此一个index下,不能有多个type重名,而类型或者其他设置不同的,因为那样是无法处理的。同一索引下,不同type的数据也会存储其他type的field的大量空值,造成资源浪费。类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立、分词器、field的value。lucene是没有type的概念的,在document中,实际上将type作为一个document的field来存储,即type。es文档在底层的存储是这样子的。原创 2022-09-06 20:45:29 · 600 阅读 · 0 评论 -
ElasticSearch7.3学习(十一)----定制分词器(Analyzer)
然后运行下面的语句。简单说下下面的规则吧,首先去除html标签,把&转换成and,然后采用standard进行分词,最后转换成小写字母及去掉停用词a the,建议读者好好看看,下面我也会对这个分词器进行测试。首先自定义一个分词器es_std。可以看到就是简单的按单词进行拆分,在接下来测试上面自定义的一个分词器es_std。这里就只介绍默认的分词器standard analyzer。接下来开始测试两种不同的分词器,首先是默认的分词器。可以看到结果只有两个单词了,把停用词都给去掉了。老规矩,测试这个分词器。原创 2022-09-05 21:34:18 · 576 阅读 · 0 评论 -
ElasticSearch7.3学习(十)----采用restful风格对索引的增删改查
直接put数据 PUT index/_doc/1,es会自动生成索引,并建立动态映射dynamic mapping。这样的话很大可能与实际的需求不服,在实际的应用上,我们需要自己手动建立索引和映射,这也是为了更好地管理索引。就像数据库的建表语句一样。删除索引有好几种方式,指定删除某一个,删除某两个,根据匹配来进行删除,或者直接删除全部索引。其中的aliases含义是索引别名,可以和数据库中的别名类比记忆。查询数据的话两种方式都可以查到。比如说修改索引中的副本数。原创 2022-09-05 21:32:50 · 350 阅读 · 0 评论 -
ElasticSearch7.3学习(九)----Mapping核心数据类型及dynamic mapping
默认为index=true,即要进行索引,只有进行索引才可以从索引库搜索到。删除索引,重新创建映射,将pic的index设置为false,尝试根据pic去搜索,结果搜索不到数据。:是否在source之外存储,每个文档索引后会在 ES中保存一份原始文档,存放在"_source"中,一般情况下不需要设置store为true,因为在_source中已经有一份原始文档了。字段为关键字字段,通常搜索keyword是按照整体搜索,所以创建keyword字段的索引时是不进行分词的,比如:邮政编码、手机号码、身份证等。原创 2022-09-05 21:28:58 · 209 阅读 · 0 评论 -
ElasticSearch7.3学习(八)----倒排索引解析及初识分词器(Analyzer)
作用:简单来说就是切分词语。给你一段句子,然后将这段句子拆分成一个一个的单个的单词,同时对每个单词进行normalization(时态转换,单复数转换)normalization的好处就是提升召回率(recall)recall:搜索的时候,增加能够搜索到的结果的数量character filter:在一段文本进行分词之前,先进行预处理,比如说最常见的就是,过滤html标签(hello --> hello),& --> and(I&you --> I and you)原创 2022-09-04 23:03:04 · 266 阅读 · 0 评论 -
ElasticSearch7.3学习(七)----Mapping映射入门
搜索结果为什么不一致,因为es自动建立mapping的时候,设置了不同的field不同的data type。不同的data type的分词、搜索等行为是不一样的。动态映射:dynamic mapping,自动为我们建立index,以及对应的mapping,mapping中包含了每个field对应的数据类型,以及如何分词等设置。概念:自动或手动为index中的_doc建立的一种数据结构和相关配置,简称为mapping映射。q=post_date:2019-01-01 1条结果。原创 2022-09-04 23:00:58 · 619 阅读 · 0 评论 -
ElasticSearch7.3学习(六)----文档(document)内部机制详解
假设说现在100个bulk请求发送到了一个节点上去,然后每个请求是10MB,100个请求,就是1000MB = 1GB,然后每个请求的json都copy一份为jsonarray对象,此时内存中的占用就会翻倍,就会占用2GB的内存,甚至还不止。决定一个document在哪个shard上,最重要的一个值就是routing值,默认是_id,也可以手动指定,相同的routing值,每次过来,从hash函数中,产出的hash值一定是相同的。如上图所示,存在一个book索引,3个主分片,一个副本分片。原创 2022-09-03 21:01:21 · 417 阅读 · 0 评论 -
ElasticSearch7.3学习(五)----分布式及容错机制
(3)这个时候,只会将3个primary shard分配到仅有的一个node上去,另外3个replica shard是无法分配的。(1)replica shard分配:3个primary shard,1node,3个replica shard,1 node。在node1宕机的情况下,那么P0 shard就会消失,所有的主分片不是全active,那么集群的状态是red。(1)单node环境下,创建一个index,有3个primary shard,3个replica shard。(1)管理es集群的元数据。原创 2022-09-03 17:34:52 · 491 阅读 · 0 评论 -
ElasticSearch7.3学习(四)----结合Spring boot进行增删改查和批量(bulk)详解
结合Spring boot进行增删改查和批量(bulk)详解原创 2022-09-02 20:49:38 · 746 阅读 · 0 评论 -
ElasticSearch7.3学习(三)----采用restful风格 批量(bulk)增删改
采用restful风格 批量(bulk)增删改原创 2022-09-02 20:47:50 · 907 阅读 · 0 评论 -
ElasticSearch7.3学习(二)----内部基于_version乐观锁控制机制
悲观锁与乐观锁机制原创 2022-09-02 08:32:59 · 289 阅读 · 0 评论 -
ElasticSearch7.3学习(一)----采用restful风格 基本的增删查改语句
采用restful风格 基本的增删查改原创 2022-09-01 21:53:08 · 421 阅读 · 0 评论 -
错误解决:ElasticSearch SearchResponse的Hits[]总是比totalHits少一条记录
错误解决:ElasticSearch SearchResponse的Hits[]总是比totalHits少一条记录原创 2022-08-31 21:48:07 · 1400 阅读 · 1 评论 -
基于Lucene的全文检索实践
数据可以分为结构化数据和非结构化数据,对数据查询时,结构化数据可以通过SQL语句等方式查询,而非结构化数据(如txt,word等)无法用此方式查询。我们利用将非结构化数据转化为非结构化数据(即先将文件中单词按空格拆分,把单词创建一个索引,然后查询索引,根据单词和文档的关系找到文档列表,即全文检索),进行快速查询。先创建索引,然后查询索引的过程是全文检索具有一次创建,多次使用的特点(创建的速度有点慢)。...原创 2022-08-29 19:56:57 · 311 阅读 · 0 评论