
ElasticSearch
文章平均质量分 90
ES笔记
-代号9527
逢山开路,遇水搭桥!纸上得来终觉浅,绝知此事要躬行。
展开
-
【ElasticSearch】ES集群搭建、监控、故障转移
海量数据存储问题单点故障问题因此,考虑使用ES集群:海量数据存储问题:将索引库从逻辑上拆分为N个分片(shard),存储到多个节点。如此,ES的存储能力就是所有节点存储能力的总和单点故障问题:将分片数据在不同的节点备份(replica),即主分片和副本分片不能在同一个节点。原创 2023-07-13 22:32:39 · 2724 阅读 · 0 评论 -
【ElasticSearch】ES与MySQL数据同步方案及Java实现
使用canal中间件去监听mysql的binlog,当binlog发生改变,就通知hotel-demo,和上面不同的时,更加解放了hotel-admin这个上游服务,它往mysql写完数据就算任务完成,不用发消息,也不用调用其他服务,引入消息队列,hotel-admin将数据写入mysql,并且自己再往MQ发条消息,说"数据更新了",任务就算完成,至于后面的hotel-demo什么时候更新ES,花费了多久,那是hotel-demo自己的事情。在hotel-admin服务中,模拟MySQL数据的增删改查。原创 2023-07-13 01:32:50 · 6932 阅读 · 14 评论 -
【ElasticSearch】ES自动补全查询与Java接口实现
实现搜索框自动补全,在tokenizer之前对文本进行处理。例如删除字符、替换字符tokenizer:将文本按照一定的规则切割成词条(term)。例如keyword,就是不分词;还有ik_smart:将tokenizer输出的词条做进一步处理。例如大小写转换、同义词处理、拼音处理等在创建索引库时,// 自定义分词器 "my_analyzer" : {原创 2023-07-10 16:59:22 · 2284 阅读 · 0 评论 -
【ElasticSearch】数据聚合语法与Java实现
默认情况下,Bucket聚合会统计Bucket内的文档数量,记为_count,并且按照_count降序排序。这里获取筛选信息的接口有传参,是因为,如果筛选项是对索引库全部数据进行聚合,就会出现这个场景;即,我已经搜了上海虹桥了,但底下的城市过滤项还有其他城市,因此要对聚合加过滤条件。统计所有数据中的酒店品牌有几种,此时可以根据酒店品牌的名称做聚合。看到这个格式,最先想到的数据格式应该是Map。原创 2023-07-09 18:51:46 · 2910 阅读 · 0 评论 -
【ElasticSearch】ES案例:旅游酒店搜索
接下来添加品牌、城市、星级、价格的过滤功能。这里参与搜索的条件对应着不同的搜索类型,有全文检索,有精确查找,自然要用复合查询Boolean Search。从页面分析,我们需要实现搜索、分页、排序等功能。接下来实现根据这个坐标,将酒店结果按照到这个点的距离升序排序。接下来实现酒店搜索功能,完成关键字搜索和分页。重启服务,搜索和分页已实现。原创 2023-07-08 22:33:38 · 1270 阅读 · 1 评论 -
【ElasticSearch】JavaRestClient实现文档查询、排序、分页、高亮
发现结果并未高亮,因为上面抽取的handleResponse方法是对_source下处理的,这里的数据是原数据,本就不会被修改,因此要继续拿highlight下的数据,即解析高亮结果。构建DSL是通过HighLevelRestClient中的resource()方法来实现的,这里包含了查询、排序、分页、高亮等操作。精确查询常见的有term查询和range查询,同样利用QueryBuilders实现。构建查询条件的核心部分,即查询类型,是用一个名为。实现的,它包含了各种查询方法。对响应的处理代码相同,这里。原创 2023-07-07 23:10:29 · 3291 阅读 · 4 评论 -
【ElasticSearch】搜索结果处理:排序、分页、高亮
以上两个案例中,指定排序字段后,可以看到返回结果中_score为null,即指定排序字段,ES就不用打分了,这样对查询性能也有一定提升。此时,如果搜索页数过深,或者结果集(from + size)越大,对内存和CPU的消耗也越高。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。ES底层有默认的分页参数,因此默认情况下只返回top10的数据,可通过修改。:对酒店数据按照用户评价降序排序,评价相同的按照价格升序排序。原创 2023-07-07 10:39:25 · 869 阅读 · 0 评论 -
【ElasticSearch】DSL查询语法
注意这里的字段只有一个,但实际场景如:输入虹桥,预期返回business、name、brand等字段包含虹桥的数据,如此就得用上一节的。当然可以人为控制文档相关性算分,从而控制文档排名(fuction score:算分函数查询),例如百度竞价,谁出价高谁就在搜索第一位。对于不参与算分的查询,就放到must_not或者filter,减少不必要的算分,以提高查询性能。二者结果一样,但从性能考虑,推荐match+copy_to,因为参与搜索的字段越多,性能越低。原创 2023-07-06 23:31:30 · 3877 阅读 · 1 评论 -
【ElasticSearch】JavaRestClient实现索引库和文档的增删改查
ES官方提供了各种不同语言的客户端,用来操作ES,即RestClient。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。原创 2023-07-05 23:48:51 · 2109 阅读 · 0 评论 -
【ElatsticSearch】ES索引库与文档的增删改查
根据传入的id,删除旧文档,再添加新文档(delete from where xx=文档id + insert table …即:**插入文档时,es会检查文档中的字段是否有mapping,如果没有则按照默认mapping规则来创建索引。,但是允许某个类型的字段有多个值,只管括号里元素的类型,即这里的score是double类型。注意,当传入的文档id不存在,先删后改就成了空删,相当于增加文档了,是个新增操作了。创建的这一整个索引,也就像MySQL中的一张表了。对索引库中文档的约束。原创 2023-07-04 17:04:21 · 2973 阅读 · 1 评论 -
【ElasticSearch】什么是ES?ES的安装
如此,词条不重复,建立索引的时候可哈希,也可B+树。1)词条词典(Term Dictionary):记录所有词条,以及词条与倒排列表(Posting List)之间的关系,会给词条创建索引,提高查询和插入效率。给id创建索引,生成一个B+树,根据id检索的数据就会非常快。以上:虽然要先查询倒排索引,再查询正向索引(id),但是无论是词条、还是文档id都建立了索引,查询速度非常快!数据库的表会有约束信息,用来定义表的结构、字段的名称、类型等信息。,是索引中文档的字段约束信息,类似表的结构约束。原创 2023-05-31 21:10:33 · 1085 阅读 · 0 评论