Elasticsearch
文章平均质量分 55
记录ES的系列知识点
谈笑风生...
这个作者很懒,什么都没留下…
展开
-
Elasticsearch利用geo point地理数据搜索指定区域的实体
假设现在有一个需求,让你无论身在任何地方,都可以根据当前所在的位置,找到自己身边的符合条件的一些酒店,那么此时就完全可以使用es来实现,非常合适。比如我现在在上海某个大厦附近,我要搜索到距离我2公里以内的5星级的带游泳池的一个酒店s,用es就完全可以实现类似这样的基于地理位置的搜索引擎。ES中geo_point数据类型的认识和简单使用建立geo_point类型的mapping,地理位置的数据类型,就是geo_point,说白了,就是一个地理位置坐标点,包含了一个经度,一个维度,经纬度,就可以唯一定位一原创 2022-01-04 19:05:53 · 737 阅读 · 1 评论 -
Elasticsearch基于global bucket搜索+聚合深入分析
聚合操作是在指定范围内的数据之上进行的,这个数据范围可以是你搜索出来的数据,也可以全体数据。基于global bucket实现不同范围内的聚合操作实现两种聚合操作,一个聚合操作,必须在query的搜索结果范围内执行,另一个聚合结果,是对所有数据执行聚合的。GET /tvs/sales/_search { "size": 0, "query": { "term": { "brand": { "value": "长虹" } } },原创 2022-01-04 17:36:59 · 289 阅读 · 0 评论 -
Elasticsearch使用bucket嵌套实现颜色+品牌的多层下钻分析
以一个家电卖场中的电视销售数据为背景,来对各种品牌,各种颜色的电视的销量和销售额,进行各种各样角度的分析。先插入示例数据POST /tvs/sales/_bulk{ "index": {}}{ "price" : 1000, "color" : "红色", "brand" : "长虹", "sold_date" : "2016-10-28" }{ "index": {}}{ "price" : 2000, "color" : "红色", "brand" : "长虹", "sold_date" :原创 2022-01-04 16:39:39 · 377 阅读 · 0 评论 -
Elasticsearch基于dis_max实现best fields策略进行多字段搜索
使用dis_max关键字实现 best fields策略假如我们要搜索title或content中包含java或solution的帖子,可以使用下面这个multi-field搜索,多字段搜索。GET /forum/article/_search{ "query": { "bool": { "should": [ { "match": { "title": "java solution" }},原创 2022-01-04 15:48:19 · 466 阅读 · 0 评论 -
Elasticsearch基于boost的细粒度搜索条件权重控制
当我们遇到这样的场景时:搜索标题中包含java的帖子,同时呢,如果标题中包含hadoop或elasticsearch就优先搜索出来,同时呢,如果一个帖子包含java hadoop,一个帖子包含java elasticsearch,包含hadoop的帖子要比elasticsearch优先搜索出来。解决这个需求可以使用boost权重来控制。搜索条件的权重,boost,可以将某个搜索条件的权重加大,此时当匹配这个搜索条件和匹配另一个搜索条件的document,计算relevance score时,匹配权重更大原创 2022-01-04 15:19:24 · 1175 阅读 · 0 评论 -
Elasticsearch如何控制全文检索结果的精准度
搜索结果精准控制的第一步:灵活使用and关键字,如果你是希望所有的搜索关键字都要匹配的,那么就用and,可以实现单纯match query无法实现的效果。GET /forum/article/_search{ "query": { "match": { "title": { "query": "java elasticsearch", "operator": "and" } } }}控制搜索结果的精准原创 2022-01-04 14:55:35 · 293 阅读 · 0 评论 -
Elasticsearch中使用term filter来搜索数据
当ES版本>5.2,type=text时,默认会设置两个field,一个是field本身,比如articleID,默认会分词的;还有一个是field.keyword,比如articleID.keyword,默认不分词,但是最多会最多保留256个字符。term filter的用法下面用示例来说明。先插入示例数据POST /forum/article/_bulk{ "index": { "_id": 1 }}{ "articleID" : "XHDK-A-1293-#fJ3", "userID"原创 2022-01-04 14:30:58 · 850 阅读 · 0 评论 -
Elasticsearch基于DSL搜索语法进行复杂查询
Elasticsearch可以利用DSL句法构建各种复杂的查询语法,完成搜索操作,下面看看几个应用场景。复合查询需求:title必须包含elasticsearch,content可以包含elasticsearch也可以不包含,author_id必须不为111,对应的DSL语句如下:{ "query": { "bool": { "must": [ { "match": { "title": "elasticsearch"原创 2021-12-20 11:12:17 · 1029 阅读 · 0 评论 -
Elasticsearch基于乐观锁解决并发冲突问题
场景假设有这样一个场景:进程a从es集群里读取商品数据goods,修改后再次存到es中,与此同时,其他多个进程(进程b、c…)也在执行相同的操作,如何解决多进程并发操作。比如下面这个场景:悲观锁和乐观锁对于这种高并发问题,有悲观锁和乐观锁两种解决方案。悲观锁:每个线程进行数据操作时,都进行加锁,加锁之后,只有这个进行能操作数据。对程序来说,简单透明,,不需要额外的操纵,但是缺点也很明显,并发能力很低,同一时间只有一个进程能操作数据;乐观锁:不需要加锁,每次读取数据和修改数据时会比对版本号,如原创 2021-12-19 23:25:25 · 717 阅读 · 0 评论 -
Elasticsearch的基础分布式架构-剖析
Elasticsearch对复杂分布式机制的透明隐藏特性Elasticsearch是一套分布式的系统,分布式是为了应对大数据量,但是其隐藏了复杂的分布式机制,对使用者来说无感知。分片机制:我们随随便便将一些document插入到es集群中去,我们从没有care过数据怎么进行分片的,数据存到哪个shard中去,这些es统统帮我们完成了;cluster discovery:集群发现机制,当我们启动多个es进程时,各个进程作为一个node会自动寻找属于自己的集群,并且加入进去,并且接受数据的均衡负载。s原创 2021-12-19 22:08:38 · 2011 阅读 · 0 评论 -
Elasticsearch集群健康检查及原理
快速检查集群的健康状况es提供了一套api,叫做cat api,可以查看es中各种各样的数据。打开kibana,在Dev Tools中输入以下命令:GET /_cat/health?v执行上述命令之后,即可得到集群的健康状态,当前为yellow状态。epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time原创 2021-12-19 11:37:50 · 602 阅读 · 0 评论 -
Elasticsearch核心概念:NRT、索引、分片、副本
lucene和elasticsearch的前世今生lucene,最先进、功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂(实现一些简单的功能,写大量的java代码),需要深入理解原理(各种索引结构)elasticsearch,基于lucene,隐藏复杂性,提供简单易用的restful api接口、java api接口(还有其他语言的api接口)分布式的文档存储引擎;分布式的搜索引擎和分析引擎;分布式,支持PB级数据;开箱即用,优秀的默认参数,不需要任何额外设置,完全开源。原创 2021-12-19 10:48:25 · 828 阅读 · 0 评论 -
ES和Kibana的安装
Elasticsearch安装和启动:手动下载地址:https://www.elastic.co/cn/downloads/elasticsearchlinux下命令行下载和启动:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.0-linux-x86_64.tar.gztar -xzvf elasticsearch-7.16.0-linux-x86_64.tar.gzcd elasticse原创 2021-12-12 15:34:33 · 1876 阅读 · 0 评论