【搜索引擎】elastic search核心概念

这篇具有很好参考价值的文章主要介绍了【搜索引擎】elastic search核心概念。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文不涉及ES的具体安装下载、操作、集群的内容,这部分内容会放在后面一篇文章中。本文只包含ES的核心理论,看完本文再去学ES的细节会事半功倍。

【搜索引擎】elastic search核心概念,JAVA EE,数据库,elastic search,搜索引擎,es,elasticsearch

【搜索引擎】elastic search核心概念,JAVA EE,数据库,elastic search,搜索引擎,es,elasticsearch

目录

1.由日志存储引出的问题

2.什么是ES?

3.ES的数据结构

4.ES的核心原理

5.联系作者


1.由日志存储引出的问题

本文或者说本系列的来源:

前面我们聊过了分布式链路追踪系统,在基于日志实现的分布式链路追踪的方式seluth+zipkin中为了防止数据丢失,需要将数据持久化。我们给出的是持久化进mysql中的示例。

【JAVA】分布式链路追踪技术概论-CSDN博客

【分布式链路追踪技术】sleuth+zipkin-CSDN博客

这里就需要关注一个问题了:

用mysql来存储日志真的合适吗?或者说用什么方式来存储日志合适喃?

从两个场景来具体切入:

  • 聚合

  • 搜索

聚合:

我们收集到日志后,需要对内容进行一些统计,比如请求报错的比列,就要去统计error的数量。

搜索:

我们收集到日志后需要进行一些搜索,比如在进行问题排查的时候搜索一些具体的报错信息。

以上两个操作MySQL支持吗?很明显是支持的,用聚合函数和like函数可以轻松实现。但是性能喃?

日志是文本类的数据,是非结构化的,不是结构化的。要存储到mysql中也是将日志内容存到一个字段上,对这个字段内的内容进行模糊查询根本没办法用到索引,一旦数据量大了以后,会迎来性能上的灾难。除此之外我们再仔细思考一下,内容存在单字段内,似乎聚合也不是很好做。

所以我们说,关系型的数据交给关系型数据库来做,非关系型的数据还是交给非关系型的数据来做才合适。

这里复习一下什么是关系型和非关系型最核心的区别:

关系型,数据之间(表之间)可以通过主键、外键之间建立起很强的关系。

非关系型,数据之间相对独立,没有建立起很强关联关系的方式。

2.什么是ES?

前面我们聊过了对于文本内容来说,关系型数据库是很难满足业务要求的。这时候就需要用到专业的做文本搜索的组件。Elasticsearch(简称ES) 是为全文搜索而设计的,可以快速且高效地搜索大量文本数据。它支持复杂的查询,包括全文、模糊、通配符、范围和正则表达式查询等。

ES的架构其实可以类比数据库来理解:

【搜索引擎】elastic search核心概念,JAVA EE,数据库,elastic search,搜索引擎,es,elasticsearch

ES database
索引
类型
文档
字段

目前新版本的ES中是没有type这一层级的,这是因为ES使用了倒排索引,层级过多会影响性能,而且随着在实际应用中的铺开,大家发现对于文档来说,类型其实是多余的,如果非要使用类型的概念,索引层面已经可以实现了,把不同分类的数据放到不同的索引中就行了。于是在之前的三个大版本的迭代中,ES围绕淡化和去除type做了一些工作:

  • 5.X及其以前,一个index下允许存在多个type。

  • 6.X一个index下只允许存在一个type。

  • 7.X即其以后,取消了type这个概念。

3.ES的数据结构

ES是用Json的方式来组织数据的,下面来演示一下一篇文章在ES中是怎样存储的。

随便打开百度上今天的一条热搜新闻:

【搜索引擎】elastic search核心概念,JAVA EE,数据库,elastic search,搜索引擎,es,elasticsearch

建立好索引并声明好各个字段的配置:

ES是采用rest api的方式通过http method+参数的方式来进行操作的,创建index是put方法跟上index的名字和index的详细描述。

PUT /my_article_index

{
  "settings": {
    "number_of_shards": 3,  // 设置分片数量
    "number_of_replicas": 1  // 设置副本数量
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text",  // 文本类型,用于全文搜索
        "fields": {
          "keyword": {
            "type": "keyword",  // 关键字类型,用于精确匹配
            "ignore_above": 256  // 忽略较长的文本
          }
        }
      },
      "content": {
        "type": "text",  // 文本类型,用于全文搜索
        "analyzer": "standard"  // 使用标准分析器
      },
      "author": {
        "type": "keyword"  // 关键字类型,用于精确匹配
      },
      "publish_date": {
        "type": "date",  // 日期类型
        "format": "yyyy-MM-dd HH:mm:ss||epoch_millis"  // 支持的日期格式
      }
    }
  }
}

将文章存进建立好的索引中:

ES是采用rest api的方式通过http method+参数的方式来进行操作的,向index中添加数据是post方法+index名字+_doc+id,id可以不指定自动生成,也可以指定。

POST /my_article_index/_doc/1

{
  "title": "天南地北迎新年 喜庆欢乐庆元旦",
  "content": "央视网消息(新闻联播):辞旧迎新,欢度元旦。天南地北的人们在丰富多彩的节庆活动中迎接2024年的到来。跨年夜,神州大地一派欢乐。在北京,新年倒计时主场活动在首钢园举行,精彩纷呈的光影秀、灯光雕塑、文艺表演等,将园区变成了欢乐的海洋。在江西南昌,充满科技与未来感的灯光秀,在城市楼宇间变幻出一幅幅美丽的画卷。在海南海口、安徽芜湖,数百架无人机摆出各种欢度节日的字样和图案,喜迎新年的到来。在重庆解放碑中央广场,众多市民和游客共同聆听新年钟声,许下美好的新年愿望。在福建平潭综合实验区、在太湖边的苏州湾、在北国江城吉林市,寓意着幸福安康、欢乐祥和的烟花秀在夜空绽放,为人们送上新年祝福。在河南郑州、山西忻州,打铁花、创意灯展等表演吸引了众多市民游客。在山东泰山脚下,民俗非遗夜游专场,让游客亲身体验民间习俗。在黑龙江鸡西,晶莹剔透的冰雕、栩栩如生的雪雕与五彩斑斓的花灯交相辉映,营造出浓浓的节日气氛。喜迎新年,尽享欢乐。今天(1月1日),广州白云国际机场、广州南站、广州白云站响起《我爱你中国》等歌曲,大家用快闪歌舞为祖国送上祝福。在内蒙古鄂尔多斯东胜区,堆雪人、亲子拉力赛,人们在冰雪那达慕活动中欢乐跨年。在浙江绍兴丰惠古城、在湖南益阳百年书院,糖画、扇绘、竹编等充满年味的古风集市处处洋溢着节日的喜庆。在贵州乌江寨,地方传统戏剧、杂技轮番上演,人们喝茶看戏,好不惬意。在广西富川瑶族村落,村民穿上节日盛装唱瑶歌,展示传统习俗,祝福新年五谷丰登、国泰民安。",
  "author": "央视网",
  "publish_date": "2024-01-01 20:07:27"
}

4.ES的核心原理

Elasticsearch中采用倒排索引来支持对文档进行高效的全局搜索。倒排索引是类比正排索引的一个概念。比如在文档中搜索关键字,正排索引的做法是指通过索引找到数据,再在数据中搜索关键字,比如通过id找到content,再在content中寻找关键字。

id content
1001 my name is zhang san
1002 my name is li si

倒排索引的做法是指的是通过数据找到索引,再通过索引找到文档,会有个地方专门记录每个字段和索引的对应关系。

keyword id
name 1001,1002
zhang 1001
...... ......

Elasticsearch 采用倒排索引的方式,将每个词汇与其在文档中的位置建立索引。这样的设计使得它更适合文本搜索,尤其是全文搜索。字段和索引的对应关系是在建立倒排索引的时候生成的,Elasticsearch 在建立倒排索引时采用了分词(tokenization)的过程,使用分词器,将文本字段中的文本切分成一个个有意义的词(token)以便进行检索。关于分词器,这是一项开源的技术,其实现是五花八门的,常见的分词器包括标准分词器(standard tokenizer)、较简单的空格分词器(whitespace tokenizer)、关键字分词器(keyword tokenizer)等。ES是支持替换分词器的。

我想到这里大家会有这样的疑惑:

比如ES中存储的是海量数量的文章,那么分词出来的索引和分词的关系也是海量的,即使使用倒排索引,应该也很慢吧。MySQL的索引用了B+树来提升索引的匹配速度,ES是怎么处理的喃?

ES给出了以下两个维度的优化

  • 分布式

  • 倒排索引的优化

分布式:

Elasticsearch 是为分布式和水平扩展而设计的,它将数据分布在多个节点上,每个节点负责部分数据。这样可以让每个节点上的倒排索引总的规模要小一些。

倒排索引的优化:

Elasticsearch 对倒排索引进行了多方面的优化,包括倒排索引的压缩、分段存储、合并和优化等策略,以提高查询性能。

总的来说倒排索引是文档全文搜索最好的解法,剩下要做的都是围绕采用倒排索引后带来问题进行优化,仅此而已。

5.联系作者

商务合作、各种交流:

【搜索引擎】elastic search核心概念,JAVA EE,数据库,elastic search,搜索引擎,es,elasticsearch

公众号:每日十分钟系列,上下班通勤路上,花十分钟掌握一个新的计算机技术知识点,欢迎关注文末公众号。文章来源地址https://www.toymoban.com/news/detail-773594.html

到了这里,关于【搜索引擎】elastic search核心概念的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 整合 分布式搜索引擎 Elastic Search 实现 数据聚合

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 本篇文章将讲解 Elastic Search 如何实现数据聚合,以及 在项目实战中如何通过数据聚合实现业务需求并完成功能。 以下为官方

    2024年02月11日
    浏览(19)
  • Spring Boot 整合 分布式搜索引擎 Elastic Search 实现 我附近的、酒店竞排

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 在酒店列表页的右侧,有一个小地图,点击地图的定位按钮,地图会找到你所在的位置: 点击定位后,会发送给服务端以下请求

    2024年02月06日
    浏览(15)
  • 揭秘Elasticsearch:一文读懂分布式搜索与分析引擎的核心概念

            Elasticsearch 是一个开源、分布式、实时搜索和分析引擎,专门用于处理大规模数据的快速检索与分析。它建立在 Apache Lucene 的基础上,但提供了比 Lucene 更为丰富的功能和友好的RESTful API 接口,使得开发者能够轻松地进行全文搜索、结构化搜索以及对海量数据进行

    2024年02月19日
    浏览(14)
  • 【boost_search搜索引擎】1.获取数据源

    boost_search项目和百度那种不一样,百度是全站搜索,而boost_search是一个站内搜索。而项目的宏观上实现思路就如同图上的思路。 我们要实现一个站内搜索,我们就要有这个网站的数据源,我们可以从boost.org官网获取它的数据源 我们点击下载,进入到这个界面,直接下载它的

    2024年03月28日
    浏览(13)
  • 搭建自己的搜索引擎——oh-my-search使用

    使用elasticsearch和search-ui搭建自己的搜索引擎,快速查找资源和文件。如果对代码感兴趣,相关代码已在github上开源,欢迎fork代码。 先搭建eleasticsearch再搭建kibana 搭建elasticsearch 编辑docker-compose.yml文件,内容如下: 其中./es/config/elasticsearch.yml的内容如下,可按需修改: 启动

    2024年02月08日
    浏览(12)
  • 搜索引擎概念解析

    MySQL搜索引擎举例 搜索引擎是一种用于在互联网上搜索并呈现相关信息的工具。它通过自动扫描和索引大量网页内容,并根据用户提供的或查询条件,返回与之相关的网页链接和摘要。 当用户在搜索引擎中输入或查询语句后,搜索引擎会根据其索引中存储的网页

    2024年02月12日
    浏览(11)
  • 阿里开源自研高性能核心搜索引擎 Havenask

    去年12月,阿里开源了自研的大规模分布式搜索引擎 Havenask(内部代号 HA3)。  Havenask 是阿里巴巴内部广泛使用的大规模分布式检索系统,支持了淘宝、天猫、菜鸟、优酷、高德、饿了么等在内整个阿里的搜索业务,是过去十多年阿里在电商领域积累下来的核心竞争力产品

    2024年02月04日
    浏览(18)
  • 【AI人工智能】Phind:免费面向开发者的生成式 AI 搜索引擎 | FREE Generative AI search engine for developers

    Phind 通过简单的解释和来自网络的相关代码片段来回答技术问题。  与ChatGPT和new Bing一样,Phind由大语言模型(Large Language Model (LLM))驱动。体验后,个人感觉在技术方面的检索能力和质量上Phind 比 new Bing 和 ChatGPT 的体验要好得多。 Phind也支持非开发人员相关问题回答,响应

    2023年04月19日
    浏览(18)
  • ChatGPT 是传统搜索引擎的终结?——Web3 创新 | Is ChatGPT The End Of Traditional Search Engines—Web3 Innovation

      人工智能驱动的聊天机器人的日益普及是否意味着传统搜索引擎的消亡? 目录 Does ChatGPT has the power to kill traditional search engines?ChatGPT 是否具有杀死传统搜索引擎的能力?

    2024年02月07日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包