Elasticsearch(一)---介绍

简介

Elasticsearch是一个基于Lucene的实际的分布式搜索和分析引擎。设计用于云计算中,能够达到近实时搜索,稳定,可靠,快速,安装使用方便。基于RESTful接口。

官网地址:Elasticsearch 平台 — 大规模查找实时答案 | Elastic

ES与solr的对比:

接口

    类似webservice的接口  solr

    REST风格的访问接口 es

分布式存储

    solrCloud  solr4.x才支持

    es是为分布式而生的

支持的格式

    solr  xml   json

    es  json

倒排索引

lucene

例如:我们有两个文档:

The quick brown fox jumped over the lazy dog

Quick brown foxed leap over lazy dogs in summer

我们首先将每个文档进行分词,创建一个对唯一词语有序的列表,

对每个词在哪些文档中出现过的文档列表。

如右图所示:

Doc_1:

The quick brown fox jumped over the lazy dog

Doc_2:

Quick brown foxed leap over lazy dogs in summer

现在我们查询quick brown,我们只需要知道这个词在哪些文档出现过:

如果我们使用简单的相似性算法,比如说将每个文档匹配的词语数相加,我们就能看出来第一个文档更加匹配,比第二个文档更加符合我们的查询条件:quick brown。

优化:

1、Quick可以全小写,则和quick一样

2、foxes转换为原型fox。dogs变为dog

3、jumped和leap是同义词,都看成jump

倒排索引变为:

此时,如果我们在将查询条件使用相同的流程进行转换则两个文档都能匹配上了。

进行分词和同义词等操作称为“分析”。

倒排索引

关键字 对应的文档 每个文档的tf-idf的值(相关度得分) 每个文档中关键字出现的位置以及偏移量(为了做高亮)

Hello doc1:10:56~60,doc2:11:56~60,doc3:9:56~60,doc4:4:56~60

word doc1:10:56~60,doc2:11:56~60,doc3:9:56~60,doc4:4:56~60

tom doc1:10:56~60,doc2:11:56~60,doc3:9:56~60,doc4:4:56~60

hadoop doc1:10:56~60,doc2:11:56~60,doc3:9:56~60,doc4:4:56~60

一个HTML页面

lucene的倒排索引占文档的20%~30%

100GB   20G~30G

索引的过程

获取文档,并将文档进行分词

计算每个词的相关程度

计算每个词在词条中的位置和偏移量

。。。

搜索的过程

获取用户的输入

分词

到倒排索引中对词语进行查找,并按照词语相关度做倒序排列

将结果返回给用户。

ES优点:(了解)

  1. 分布式:ES的自动发现机制会识别新增的节点并重新平衡分配数据。
  2. 全文检索:ES后台使用Lucene提供全文检索,自带多语言支持、强大的查询语言、地理位置支持、上下文感知的建议、自动完成和搜索片段
  3. 近实时搜索和分析:数据从进入ES到能够搜索到是近实时的。除了搜索,ES也可以进行聚合分析操作。
  4. 高可用:ES会自动发现新的或失败的节点,重组和重新平衡数据,确保数据是安全的和可访问的。
  5. 模式自由:ES的动态Mapping机制可以自动检测数据的结构和类型,创建索引,并使数据可搜索。
  6. RESTful API:几乎任何操作都可以使用一个简单的RESTful API,JSON基于HTTP请求来实现,客户端也可以使用多种编程语言。

应用场景(了解)

  1. 站内搜索:京东、淘宝、论坛等的站内搜索
  2. NoSQL数据库:ES读写性能优于MongoDB,同时也支持地理位置查询
  3. 日志分析:日志分析由实时日志分析平台ELK完成,能够对日志进行集中的收集、存储、搜索、分析、监控以及可视化。

如何索引文档(理解)

为新增的文档创建倒排索引

默认情况下,当索引一篇文档的时候,系统首先根据文档ID的散列值选择一个主分片,并将文档发送到该主分片。这份主分片可能位于另一个节点。然后文档被发送到该主分片的所有副本分片进行索引,副本分片和主分片之间保持数据的同步。

如何检索文档(理解)

在默认情况下,搜索请求通过round-robin轮询机制选中主分片和副本分片,其假设集群中所有的节点是同样快的。

接收客户端请求的分片节点会创建一个空的优先级队列并且配置好分页参数from与size。

该节点将检索请求发送给该索引中个每一个shard(无论是primary还是replica,可以构成一个完整的索引数据)。每个shard在本地执行检索,并将结果添加到本地优先级队列中。

每个shard返回本地优先级序列中所记录的_id与sort值,并发送给接收客户端请求的节点,该节点将这些值合并到自己的本地的优先级队列中,并做全局的排序,返回给客户端。

脑裂问题(理解)

1. 网络:由于是内网通信,网络通信问题造成某些节点认为master死掉,而另选master的可能性较小

2. 节点负载:由于master节点与data节点都是混合在一起的,所以当工作节点的负载较大时,导致对应的ES实例停止响应,而这台服务器如果正充当着master节点的身份,那么一部分节点就会认为这个master节点失效了,故重新选举新的节点,这时就出现了脑裂;同时由于data节点上ES进程占用的内存较大,较大规模的内存回收操作也能造成ES进程失去响应。fullGC  stop the world

解决方式:

主节点

node.master: true  

node.data: false  

从节点

node.master: false  

node.data: true  

所有节点

discovery.zen.ping.multicast.enabled: false  

discovery.zen.ping.unicast.hosts: [“master”, “slave1”, “slave2"]  

discovery.zen.minimum_master_nodes: 2

单播:点对点通信,不是吼一嗓子,而是悄悄的问,谁是我兄弟

多播:吼一嗓子,谁是我兄弟,大家可以同时听到

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

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

相关文章

国密SM算法及实现加密和解密

一 引入pom <dependency><groupId>com.antherd</groupId><artifactId>sm-crypto</artifactId><version>0.3.2</version></dependency> 二 代码实现 package com.example.ytyproject.component;import com.antherd.smcrypto.…

C++学习初探---‘C++面向对象‘-继承函数重载与运算符重载

文章目录 前言继承继承是什么&#xff1f;三种访问权限的继承&#xff1a; 函数重载与运算符重载函数重载运算符重载可重载运算符&不可重载运算符 前言 第三次学习记录&#xff0c;依旧是C面向对象的内容。 继承 继承是什么&#xff1f; C中的继承是一种面向对象编程&am…

企业 Tomcat 运维 部署tomcat反向代理集群

一、Tomcat 简介 Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用服务器&#xff0c; Tomcat和Nginx、Apache(httpd)、Web服务器一样&#xff0c;具有处理HTML页面的功能不过Tomcat处理静态HTML的能力不如Nginx/Apache服务器 一个tomcat默认并…

vue中把弹出层.vue文件注册成组件供其他.vue文件调用的写法

背景&#xff1a;因弹出层多个页面的详情都是一样的&#xff0c;因此把弹出层定义成组件&#xff0c;多次调用 定义组件的过程中出现很多问题&#xff0c;因此再次记录最终成功的写法 一、 简单实现页面调用弹出层组件的打开弹出层方法&#xff1a; 1. 弹出层组件 (in…

Linux机器网络检查

查看DNS file: dianTestLRSSnapshot:~$ cat /etc/resolv.conf # This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients to the # internal DNS stub resolver of systemd-resolved. This file…

SpringBoot快速整合canal1.1.5(TCP模式)

SpringBoot快速整合canal1.1.5&#xff08;TCP模式&#xff09; 安装并配置MySQL主从⭐ 1&#xff1a;Docker安装MySQL8.0.28 docker pull mysql:8.0.282&#xff1a;创建目录&#xff1a; mkdir -p /usr/local/mysql8/data mkdir -p /usr/local/mysql8/log mkdir -p /usr/…

STL源码剖析系列:其一、list

一、基本用法 list的基本用法比较简单&#xff0c;可以参考站长严长生的教程&#xff1a; C list&#xff08;STL list&#xff09;容器完全攻略&#xff08;超级详细&#xff09; 下面重点介绍list源码。 二、

Web3 React项目Dapp获取智能合约对象

上文Web3 整理React项目 导入Web3 并获取区块链信息中&#xff0c;我们在react搭建的dapp中简单拿到了我们区块链中的账号授权信息 那 我们继续 先终端运行 ganache -d将ganache环境起起来 然后 我们运行 dapp 拿到授权列表 回到上文结束的一个状态 然后 我们发布一下自己的…

ArcGIS统计各种土地利用类型的总面积

如下图为研究区多个村的土地利用现状图,现在需统计每种类型的面积总和,以及每个行政村内各种土地利用类型的总面积。本文通过案例的形式,讲解ArcGIS中两种常用的分类统计面积的工具,建议收藏。 文章目录 1. 加载土地利用数据2. 常规属性汇总统计3. 汇总统计数据1. 加载土地…

软件安利——火绒安全

近年来&#xff0c;以优化、驱动、管理为目标所打造的软件屡见不鲜&#xff0c;大同小异的电脑管家相继走入了公众的视野。然而&#xff0c;在这日益急功近利的社会氛围驱动之下&#xff0c;真正坚持初心、优先考虑用户体验的电脑管家逐渐湮没在了浪潮之中。无论是鲁大师&#…

【C++】string类

STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 为什么学习string类&#xff1f; 1、C语言中的字符串 C语言中&#xff0c;字符串是以\0结尾…

Star History 九月开源精选 |开源 GitHub Copilot 替代

虽然大火了近一年&#xff0c;但是截至目前 AI 唯一破圈的场景是帮助写代码&#xff08;谷歌云旗下的 DORA 年度报告也给 AI 泼了盆冷水&#xff09;。不过对于软件开发来说&#xff0c;生成式人工智能绝对已经是新的标配。 本期 Star History 收集了一些开源 GitHub Copilot …

【用python实现一个压缩文件的解压】

1.想用python实现一个压缩文件的解压 在Python中&#xff0c;可以使用内置的zipfile模块来解压缩文件。以下是一个简单的示例代码&#xff0c;用于解压缩一个zip文件&#xff1a; import zipfile# 指定要解压的zip文件路径 zip_path example.zip# 指定解压后的文件存放目录 …

Python中的Scrapy库

Python中的Scrapy库是一个高效的爬虫框架&#xff0c;用于创建和实现异步的网络爬虫。它提供了一个API来简化爬取网站数据的过程&#xff0c;从而节省开发人员的时间和精力。本篇博客文章将详细介绍Scrapy库的使用和API&#xff0c;并提供相应的代码注释&#xff0c;帮助读者更…

实现多平台兼容性:开发同城外卖小程序的技术策略

在移动互联网时代&#xff0c;外卖行业的快速崛起改变了人们点餐的方式。随着小程序的兴起&#xff0c;开发同城外卖小程序成为了许多企业的重要战略。然而&#xff0c;小程序的多平台兼容性成为了一项关键挑战。本文将探讨如何实现多平台兼容性&#xff0c;以开发高效且用户友…

Scrum master的职责

首先&#xff0c;Scrum master负责建立Scrum团队。同时Scrum master要帮助团队&#xff08;甚至大到公司&#xff09;中的每个成员理解Scrum理论和实践。 Scrum master还需要有很强的软技能&#xff0c;用于指导Scrum团队。Scrum master要对Scrum团队的成功负责任&#xff0c;…

保姆级安装Jdk,Tomact,Mysql在linux中并且部署项目

&#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Linux》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这个专栏都能满足你的需求。我会用最简单易懂的语言&#xff0c;带你走进代码的世界&#xff0c;…

Ansible初认识

1、简介 Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比…

【好书推荐】ChatGPT 驱动软件开发:AI 在软件研发全流程中的革新与实践

前言 计算机技术的发展和互联网的普及&#xff0c;使信息处理和传输变得更加高效&#xff0c;极大地改变了金融、商业、教育、娱乐等领域的运作方式。数据分析、人工智能和云计算等新兴技术&#xff0c;也在不断地影响和改变着各个行业。 如今&#xff0c;我们正在见证人工智能…

使用MobaXterm向linux窗口化传输文件

使用MobaXterm向linux窗口化传输文件 之前上大学的时候&#xff0c;经常是XSheel配合Xftp使用&#xff0c;Xftp可以窗口化的往linux服务器传输文件&#xff0c;但是有一个问题&#xff0c;就是Xftp是收费的。 后来工作之后师兄给推荐了一个免费的&#xff0c;又好用的类似于Xf…