elasticsearch学习篇:初识ES

news2024/11/17 11:40:35

一、什么是ES

1、基础概念

  • 是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容
  • es是elastic stack(ELK)的核心,负责存储、搜索、分析数据。

ELK包括以下内容:

ELK被广泛应用在日志数据分析、实时监控等领域:

2、elasticsearch和lucene

elasticsearch底层是基于lucene来实现的。

Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。官网地址:Apache Lucene - Welcome to Apache Lucene 。

Lucene的优势

  • 易扩展
  • 高性能(基于倒排索引)

Lucene的缺点

  • 只限于Java语言开发
  • 学习曲线陡峭
  • 不支持水平扩展

相比与lucene,elasticsearch具备下列优势:

  • 支持分布式,可水平扩展
  • 提供Restful接口,可被任何语言调用

二、倒排索引

我们先来了解一下什么是正向索引

  • 基于文档id创建索引。查询词条时必须先找到文档,而后判断是否包含词条

那什么是倒排索引呢?

  • 对文档内容分词,对词条创建索引,并记录词条所在文档的信息。查询时先根据词条查询到文档id,而后获取到文档
     

倒排索引中有两个非常重要的概念:

  • 文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息
  • 词条(Term):对文档数据或用户搜索数据,利用某种算法分词得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条

创建倒排索引是对正向索引的一种特殊处理,流程如下:

  • 将每一个文档的数据利用算法分词,得到一个个词条
  • 创建表,每行数据包括词条、词条所在文档id、位置等信息
  • 因为词条唯一性,可以给词条创建索引,例如hash表结构索引

如图:

 倒排索引的搜索流程如下(以搜索"华为手机"为例):

  1. 用户输入条件"华为手机"进行搜索。
  2. 对用户输入内容分词,得到词条:华为、手机。
  3. 拿着词条在倒排索引中查找,可以得到包含词条的文档id:1、2、3。
  4. 拿着文档id到正向索引中查找具体文档。

虽然要先查询倒排索引,再查询倒排索引,但是无论是词条、还是文档id都建立了索引,查询速度非常快!无需全表扫描。

那么为什么一个叫做正向索引,一个叫做倒排索引呢?

  • 正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程
  • 倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程

是不是恰好反过来了?
那么两者方式的优缺点是什么呢?

正向索引:

  • 优点:
    • 可以给多个字段创建索引
    • 根据索引字段搜索、排序速度非常快
  • 缺点:
    • 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。

倒排索引:

  • 优点:
    • 根据词条搜索、模糊搜索时,速度非常快
  • 缺点:
    • 只能给词条创建索引,而不是字段
    • 无法根据字段做排序

三、ES中的一些概念

elasticsearch是面向文档Document)存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储在elasticsearch中:

  • 文档:一条数据就是一个文档,es中是Json格式
  • 字段:Json文档中的字段
  • 索引:同类型文档的集合
  • 映射:索引中文档的约束,比如字段名称、类型

下面是一些分好类的索引

 ES与数据库概念对比

 ES与数据库的关系:

  • 数据库负责事务类型操作
  • elasticsearch负责海量数据的搜索、分析、计算

因此在企业中,往往是两者结合使用:

  • 对安全性要求较高的写操作,使用mysql实现
  • 对查询性能要求较高的搜索需求,使用elasticsearch实现
  • 两者再基于某种方式,实现数据的同步,保证一致性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/700408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用python实现调用百度图片搜索的API

前言:这段代码是一个简单的图片爬虫程序它可以通过输入关键词,在百度图片中搜索相关图片,并返回一张随机的图片。代码使用Flask框架搭建了一个简单的Web应用,将用户输入的关键词作为参数传递给爬虫程序,然后从百度图片…

观察者模式(Observer)

别名 事件订阅者者(Event-Subscriber)监听者(Listener) 定义 观察者是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。 前言 1. 问题 假如你有两种类…

Linux vfs各种operation操作介绍

1.ext4文件系统定义的各种操作 //普通文件操作 const struct file_operations ext4_file_operations {.llseek ext4_llseek,.read_iter generic_file_read_iter,.write_iter ext4_file_write_iter,.unlocked_ioctl ext4_ioctl, #ifdef CONFIG_COMPAT.compat_ioctl …

【Python基础】- break和continue语句(文末送书4本)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

6 图像处理实现螺纹识别案例(matlab程序)

学习目的:学习识别案例掌握识别方法 2.代码 clear;clc;close all Iimread(luowen1.bmp); %读取螺纹图片 try Irgb2gray(I); %如果是RGB图,则转换成灰度图 catch end figure imshow(I) title(原图(半边螺纹)) f…

基于pyqt和卷积网络CNN的中文汉字识别

直接上效果演示图: 通过点击按钮可以实现在画板上写汉字识别和加载图片识别两个功能。 视频演示和demo仓库地址在b站视频001期: 到此一游7758258的个人空间-到此一游7758258个人主页-哔哩哔哩视频 所有代码展示: 十分的简洁,主…

【从零开始学习JAVA | 第二十六篇】泛型补充知识

目录 前言: 泛型的更多应用: 泛型类: 泛型方法: 泛型方法: 总结: 前言: 在上一篇文章中我们介绍了泛型的基础知识,也就是在创建集合的时候用到泛型,此时的泛型更多…

关于内存颗粒的地址映射

即便从软件角度,抛开地址译码器讨论内存颗粒中指定位置处的地址(DDR中的指定位置的电容)也是没有意义的。晶体管没有绝对地址,就如同地理测量中测定位置前需要确定坐标系一样,同一个位置在不同的坐标系中的地址描述可以…

【CVRP测评篇】 算法性能如何?来测!

我跨越了2100015秒的距离,为你送上更全面的算法性能评测。 目录 往期优质资源1 CVRP数据集2 实验准备2.1 计算机配置2.2 调参方法2.3 参数设定2.4 实验方法 3 实验结果3.1 最优解统计3.1.1各数据集上的算法性能对比3.1.2 求解结果汇总3.1.3小结一下3.1.4 还有话说 3…

使用 RedisTemplate 对象的 opsForValue() 方法获取 Redis 中的值获取不到

问题 使用 RedisTemplate 对象的 opsForValue() 方法获取 Redis 中的值获取不到 详细问题 笔者代码如下 1 使用 ValueOperations 对象的 set() 方法将一个键值对存储到 Redis 中 valueOperations.set("order:" user.getId() ":" goods.getId(), sec…

【Redis】2、Redis应用之【根据 Session 和 Redis 进行登录校验和发送短信验证码】

目录 一、基于 Session 实现登录(1) 发送短信验证码① 手机号格式后端校验② 生成短信验证码 (2) 短信验证码登录、注册(3) 登录验证① 通过 SpringMVC 定义拦截器② ThreadLocal (4) 集群 Session 不共享问题 二、基于 Redis 实现共享 session 登录(1) 登录之后,缓…

23款迈巴赫S480升级原厂10°后轮转向系统,减少转弯半径

就是低速的情况下,有更强的机动性,前后车轮的不同转动方向使得车辆可以凭借更更小转弯半径实现转向,在特定的狭窄路段或者停车时,车辆的操控性大大提升,而内轮差也缩小也增大了转向的安全性。 高速的情况下&#xff0…

C. Road Optimization(dp)

Problem - 1625C - Codeforces 火星政府不仅对优化太空飞行感兴趣,还希望改进该行星的道路系统。 火星上最重要的高速公路之一连接着奥林匹克城和西多尼亚的首都Kstolop。在这个问题中,我们只考虑从Kstolop到奥林匹克城的路线,而不考虑相反的…

技术创举!比亚迪-汉上的实景三维导航...

实景三维技术的发展日新月异,但在应用中却一直深陷内存占用、渲染缓慢、加载卡顿和模型塌陷等问题。对此,大势智慧率先推出海量数据轻量化技术,在业内首次实现实景三维模型在车机系统的直接浏览,展示了轻量化技术赋能实景三维应用…

面试Dubbo ,却问我和Springcloud有什么区别?

Dubbo 、Springcloud? 这两有关系? 前言一、RPC 框架的概念1. 什么是RPC框架2. RPC 和 普通通信 的区别 二、常用 RPC 框架1. Dubbo2. gRPC3. Thrift4. Feign 三、dubbo 与 Springcloud1. Dubbo 的模型2. Springcloud3. dubbo 与 Springcloud 的区别 前言 提到Dub…

若隐若现的芯片

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>若隐若现的芯片</title><script src"https://unpkg.co/gsap3/dist/gsap.min.js">…

HBase(5):导入测试数据集

1 需求 将ORDER_INFO.txt 中的HBase数据集&#xff0c;我们需要将这些指令放到HBase中执行&#xff0c;将数据导入到HBase中。 可以看到这些都是一堆的put语句。那么如何才能将这些语句全部执行呢&#xff1f; 2 执行command文件 2.1 上传command文件 将该数据集文件上传到指…

单点登录原理

单点登录原理 一、什么是单点登录 单点登录英文全称Single Sign On&#xff0c;简称SSO。指在多系统应用群中登录一个系统&#xff0c;便可在其他所有系统中得到授权而无需再次登录&#xff0c;包括单点登录与单点注销两部分。 二、为什么需要单点登录 在一些子系统用户信息…

初识Go语言25-数据结构与算法【堆、Trie树、用go中的list与map实现LRU算法、用go语言中的map和堆实现超时缓存】

文章目录 堆Trie树练习-用go中的list与map实现LRU算法练习-用go语言中的map和堆实现超时缓存 堆 堆是一棵二叉树。大根堆即任意节点的值都大于等于其子节点。反之为小根堆。   用数组来表示堆&#xff0c;下标为 i 的结点的父结点下标为(i-1)/2&#xff0c;其左右子结点分别为…

Python图像锐化及边缘检测(Roberts、Prewitt、Sobel、Lapllacian、Canny、LOG)

目录 图像锐化概述 算法方法介绍 代码实现 效果展示 图像锐化概述 图像锐化(image sharpening)是补偿图像的轮廓&#xff0c;增强图像的边缘及灰度跳变的部分&#xff0c;使图像变得清晰&#xff0c;分为空间域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮…