Elasticsearch扫盲篇

news/2024/11/23 3:09:44/

1. 什么是搜索?

在日常的工作和学习中,当我们说想找查询任何的信息的时候,可能第一时间会想到上百度或者谷歌去搜索一下。比如说找一部自己喜欢的电影,或者说找一本喜欢的书,或者找一条感兴趣的新闻。但是百度和谷歌不等于搜索,他们只是我们搜索时使用的工具。

搜索,就是在任何场景下,查找你想要的信息。这个时候需要输入一段你要搜索的关键字,然后就期望找到这个关键字相关的信息。

2. 用数据库做搜索

对于大多数程序员而言,大家都清楚数据都是存储在数据库里面的。比如说电商网站的商品信息,招聘网站的职位信息,新闻网站的新闻信息等等。所以说,很自然的我们会考虑到去使用数据库去进行搜索,例如使用MySQL数据库进行查询。

假如我们想要购买一件男士的T恤,在购物平台上搜索『男士T恤』,那么如果直接使用关键词在数据里中模糊搜索可能是怎么样的呢?

select * from table where pruduct_name like '%男士T恤%'

我们且不考虑数据库的全文索引什么的,假如电商网站中国的商品数量只有1000万个(其实远远不止吧),那么基本上就要查找1000万次,且每次都需要加载商品的名称字段的整段字符串,因为这种模糊查询很难使用索引来进行优化。

直接使用数据库进行搜索有几个严重的问题:

  1. 就拿商品描述这个字段来说,他的字段的长度可能有十几、上百个字,在查询的时候要对每条记录的所有文本进行扫描,来判断字段中是否包含用户指定的关键词。
  2. 没办法将搜索词拆分开来,尽可能去搜索更多的符合你的期望的结果,比如输入“男士T恤”,就搜索不出来“男士黑色T恤”。
  3. 用数据库来进行搜索,由于数据量非常大,检索起来性能会非常的差。

3. 什么是Elasticsearch

ElasticSearch是一款非常强大的、基于Lucene的开源搜索及分析引擎;它是一个实时的分布式搜索分析引擎,它能让你以前所未有的速度和规模,去探索你的数据。

它被用作全文检索结构化搜索分析以及这三个功能的组合。除了搜索,结合Kibana、Logstash、Beats开源产品,Elastic Stack(简称ELK)还被广泛运用在大数据近实时分析领域,包括:日志分析指标监控信息安全等。它可以帮助你探索海量结构化、非结构化数据,按需创建可视化报表,对监控数据设置报警阈值,通过使用机器学习,自动识别异常状况

关于ElasticSearch的由来还有一个小故事:

许多年前,一个刚结婚的名叫 Shay Banon 的失业开发者,跟着他的妻子去了伦敦,他的妻子在那里学习厨师。 在寻找一个赚钱的工作的时候,为了给他的妻子做一个食谱搜索引擎,他开始使用 Lucene 的一个早期版本。

直接使用 Lucene 是很难的,因此 Shay 开始做一个抽象层,Java 开发者使用它可以很简单的给他们的程序添加搜索功能。 他发布了他的第一个开源项目 Compass。

后来 Shay 获得了一份工作,主要是高性能,分布式环境下的内存数据网格。这个对于高性能,实时,分布式搜索引擎的需求尤为突出, 他决定重写 Compass,把它变为一个独立的服务并取名 Elasticsearch。

第一个公开版本在2010年2月发布,从此以后,Elasticsearch 已经成为了 Github 上最活跃的项目之一,他拥有超过300名 contributors(目前736名 contributors )。 一家公司已经开始围绕 Elasticsearch 提供商业服务,并开发新的特性,但是,Elasticsearch 将永远开源并对所有人可用。

据说,Shay 的妻子还在等着她的食谱搜索引擎…

刚有多次提到Lucene,ElasticSearch是基于Lucene的。但是Lucene仅仅只是一个库。为了充分发挥其功能,你还需要自己使用Java将Lucene集成到自己的应用程序中。 更糟糕的是,Lucene非常复杂,对于程序员而言学习成本非常的大。而Elasticsearch也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单,通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API

根据DB Engine的排名,ElasticSearch已经称为最受欢迎的企业级搜索引擎。

4. 主要功能及应用场景

4.1 主要功能

海量数据的分布式存储以及集群管理

搜索引擎:百度、网站的站内搜索、IT系统的检索

数据分析:电商网站,最近7天牙膏这种商品销量排名前10的商家有哪些;新闻网站,最近1个月访问量排名前3的新闻版块是哪些

分布式:ES自动可以将海量数据分散到多台服务器上去存储和检索

全文检索,结构化检索,数据分析

全文检索:搜索商品名称包含牙膏的商品。

结构化检索:搜索商品分类为日化用品的商品都有哪些。

部分匹配、自动完成、搜索纠错、搜索推荐

对海量数据进行近实时的处理

海联数据的处理:可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理

近实时:在秒级别对数据进行搜索和分析

4.2 应用场景

  1. 网站搜索、垂直搜索、代码搜索;
  2. 日志管理与分析、安全指标监控、应用性能监控、Web抓取舆情分析;

http://www.ppmy.cn/news/91649.html

相关文章

【前端面试知识点】- 大厂面试(三)

目录 1.JS垃圾回收机制2.form表单的使用以及相应的属性值3.vue中的双向数据绑定原理(重点深入学习)4.vue单向数据流5.undefined、null、NaN有什么区别?7.如何获取安全的undefined 值?8.Object.is() 与比较操作符 “ ” 、 “” 的…

随机森林Proximity实现及应用

随机森林Proximity实现及应用 1 算法1.1 随机森林Proximity简介1.2 RF-GAP1.3 实现代码 2 应用2.1 离群点(outlier)检测2.1.1 原理和实现2.1.2 实验结果 附录 项目主页:randomforest C implementation of random forests classification, regression, proximity and…

总线系统 - 总线带宽 计算

文章目录 1 概述2 总线带宽2.1 衡量计算机系统的指标2.2 计算公式 3 扩展3.1 GB、MB、KB、B 换算公式 1 概述 #mermaid-svg-PlQh8E6rS0IQvpEb {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-PlQh8E6rS0IQvpEb .erro…

selenium UI自动化中文件上传的两种方式

前言 文件上传是自动化中很常见的一个功能,那么对于文件上传你又有多少了解呢?请往下看 1、被测产品中文件上传的功能非常普遍,一般情况下需要将准备好的文件放在预定的路径下,然后在自动化测试的脚本中,去预置的路径…

深入探索: 对象构造的隐藏功能与技巧

🧑‍💻CSDN主页:夏志121的主页 📋专栏地址:Java基础进阶核心技术专栏 目录 🎃 一、重载 🎄 二、默认字段初始化 🎆 三、无参数的构造器 ✨ 四、显式字段初始化 🎊 五…

Oracle数据库从入门到精通系列之四:重做日志文件

Oracle数据库从入门到精通系列之四:重做日志文件 一、重做日志文件二、重做日志文件主要用处三、在线重做日志1.数据库高速缓存2.数据块写入器DBWn3.设置重做日志大小的参考因素四、归档重做日志一、重做日志文件 重做日志文件(redo log file):数据库的事物日志。通常情况下…

【特征选择】基于二进制蝗虫优化算法的特征选择方法(KNN分类器)【Matlab代码#29】

文章目录 【可更换其他算法,获取资源请见文章第5节:资源获取】1. 基于群智能算法的特征选择2. 二进制蝗虫优化算法3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法,获取资源请见文章第5节:资源获取】 1. 基于群智能算…

H-buildX项目(学习笔记1.0)

记录一下自己的学习过程。 首先,下载H-buildX软件,直接度娘下载即可。 以前一直用的是vscode,这次做网上的项目用到了这个。 打开 就是这样的界面,首先介绍几个常用的功能 右上角的预览,也就是运行你的Vue项目的界面效…