Elasticsearch基础1——搜索引擎发展史和工作流程、es/es-head/kibana的基础安装

2023-11-14

一、搜索引擎

1.1 搜索引擎的发展背景

  • 搜索引擎发展五个阶段:
    • 第一阶段:FTP 文件检索阶段
      • 该阶段的搜索引擎比如 Archie,只检索多个 FTP 服务器上存储的文件。我们搜索文件时需要输入精确文件名才能进行搜索,搜索出来的结果就是给我们提示FTP地址,可以从这个FTP地址下载我们搜索的文件。
    • 第二阶段:分类目录导航阶段
      • 该阶段的搜索引擎就是一个导航网站,比如hao123、搜狗浏览器主页等网站。这种网站上面都是把各种网址分类好,当我们使用此种搜索引擎时,只需要从各个分类目录里找到我们想要的网址,单击其网站链接后进入相应的网站。
    • 第三阶段:文本相关性检索阶段
      • 当互联网上的内容逐渐丰富时,网页内容和形态也开始多样化,页面中就开始出现内容与网页地址和网页标题大相径庭的情况,第二阶段的搜索引擎功能弊端就开始显形。所以为了解决这个问题,第三阶段就出现了。
      • 第三阶段搜索引擎开始引入全文搜索技术,用来保证搜索引擎检索到的网页标题与网页全文内容强一致性。
      • 使用这类搜索引警时,我们将输入的查询信息提交给搜索引擎后台服务器,搜索引擎服务器通过查阅已经索引好的网页全文信息,返回一些相关程度高的页面信息。计算输入的查询信息与网页内容相关性判断的模型主要有布尔模型、概率模型、向量空间模型等。
      • 这个阶段的搜索引擎代表有Ala Vista、Excite等。
    • 第四阶段:网页链接分析阶段。
      • 此阶段的代表作就是谷歌搜索,最大的特性就是通过结合网页内容的重要性和相似程度来改善搜索的信息质量。
      • 此阶段的搜索引擎使用的网站链接形式与当前基本相同,外部链接表示推荐,通过计算每个网站的推荐链接的数量,就可以判断一个网站的流行性和重要性。
    • 第五阶段:用户意图识别阶段。
      • 这个阶段的目的是更人性化的为每个用户服务,代表有百度搜索。
      • 在使用这类搜索引擎时,不同用户查询同一个关键词时,检索出来的结果可能不同。
      • 同一个用户搜索同样的关键词也会因时因地的不同而有所差异。比如当用户在搜索引擎上首次输入“TAL”时,可能是想查找 TAL 股票代码对应的好未来公司的网站;当用户在好未来的办公区内搜索“TAL”时,有可能是想查看 TAL 股票代码的实时股价。
  • 搜索引擎的两大分类:
    • 站外搜索:也就是全网搜索,目前主流的搜索引擎基本都是全网搜索,如谷歌、百度。主攻网站外部链接和网站品牌推广。

    • 站内搜索:比如微博、京东、饿了么、淘宝、美团等。主攻网站内部结构、内容。

1.2 Lucene和Elasticsearch

  • 说Elasticsearch之前,需要先了解一下Lucene,因为ElasticSearch 是在Lucene 之上封装出来的一个工具。
  • Lucene是一个免费、开源、高性能信息检索工具包,是以纯Java语言编写出来的一个jar包,并不包含搜索引擎系统。只包含索引结构、读写索引的工具、排序、搜索规则…等工具类。
  • Lucene的由来:
    • 在Google公司成立着力于研发搜索引擎之后,一位名叫Doug Cutting的美国工程师,也迷上了搜索引擎。他做了一个用于文本搜索的函数库(姑且理解为软件的功能组件),命名为Lucene。
    • 这个人后面也搞出了大数据Hadoop。
  • Lucene为什么只是个工具包?
    • 因为创始人当初研究它的初衷主要是为软件开发人员提供一个简单易用的工具包,主要提供倒排素引的查询结构,以方便软件开发人员在其业务系统中实现全文检索的功能。
  • Elasticsearch的由来:
    • 一个叫做Shay Banon的开发者给老婆构建一个食谱的搜索引擎,方便他老婆学习厨师,并开始构建一个早期版本的Lucene。
    • 直接基于Lucene工作会比较困难,所以他开始抽象Lucene代码以便Java程序员可以在应用中添加搜索功能。他发布了他的第一个开源项目,叫做“Compass”。
    • 后来他找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。
    • 在2010年2月公开第一个Elasticsearch版本,并成为当时Github上最受欢迎的项目之一,一家主营Elasticsearch的公司就此成立。
  • Elasticsearch是什么?
    • Elaticsearch,简称为es,是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据,本身扩展性很好可以扩展到上百台服务器,处理PB级别的数据。
    • es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucne的复杂性,从而让全文搜索变得简单。
  • 谁在使用Elasticsearch?
    1. 维基百科,有用到全文检索、高亮,根据权重搜索推荐。
    2. The Guardian(国外新闻网站),用户行为日志(点击,浏览,收藏,评论)+社交网络数据(对某某新闻的相关看法),数据分析,给到每篇新闻文章的作者,让他知道他的文章的公众反馈(好,坏,热门,垃圾,鄙视,崇拜)
    3. Stack Overflow(国外的程序异常讨论论坛 ),IT问题,程序的报错,提交上去,有人会跟你讨论和回答,全文检索,搜索相关问题和答案,程序报错了,就会将报错信息粘贴到里面去,搜索有没有对应的答案。
    4. GitHub( 开源代码管理 ),搜索上千亿行代码。
    5. 电商网站,检索商品。
    6. 日志数据分析,logstash采集日志,ES进行复杂的数据分析,ELK技术,elasticsearch+logstash+kibana=ELK。
    7. 商品价格监控网站,用户设定某商品的价格闻值,当低于该阔值的时候,发送通知消息给用户,比如说订阅牙膏的监控,如果高露洁牙膏的家庭套装低于50块钱,就通知我,我就去买。
    8. BI系统,商业智能,Business lnteligence。比如说有个大型商场集团,BI,分析一下某某区域最近3年的用户消费金额的趋势以及用户群体的组成构成,产出相关的数张报表,*区,最近3年,每年消费金额呈现100%的增长,而且用户群体85%是高级白领,开一个新商场。ES执行数据分析和挖掘,Kibana进行数据可视化。
    9. 国内: 站内搜索(电商,招聘,门户),IT系统搜索 (OA,CRM,ERP),数据分析。
  • Lucene的优点:
    1. 索引文件格式独立于应用平台。Lucene 定义了一套以8 位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。
    2. 索引速度快。在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。
    3. 简单易学。优秀的面向对象的系统架构,降低了 Lucene 扩展的学习难度,方便扩充新功能
    4. 跨语言。设计了独立于语言和文件格式的文本分析接口,索引器通过接收 Token 流完成索引文件的创立,用户扩展新的语言和文件格式,只需实现文本分析的接口即可。
    5. 强大的查询引擎。Lucene 默认实现了一套强大的查询引擎,用户无须自己编写代码即可通过系统获得强大的查询能力。Lucene 默认实现了布尔操作、模糊查询、分组查询等。
  • Lucene的主要模块作用
    • Analysis模块:主要负责词法分析及语言处理,也就是我们常说的分词,通过该模块可最终形成存储或者搜索的最小单元 Term。
    • Index模块:主要负责索引的创建工作。
    • Store 模块:主要负责索引的读和写,主要是对文件的一些操作,其主要目的是抽象出和平台文件系统无关的存储。
    • QueryParser 模块:主要负责语法分析,把查询语生成 Lucene 底层可以识别的条件。
    • Search 模块:主要负责对索引的搜索工作。
    • Similarity模块:主要负责相关性打分和排序的实现。
  • Lucene核心术语:
    • Term:索引中最小的存储和查询单元。对于英文语境而言,一般是指一个单词;对于中文语境而言,一般是指一个分词后的词。
    • 词典(Term Dictionary):是 Term的集合。词典的数据结构有很多种,各有优缺点。如可以通过排序数组(通过二分查找来检索数据)、HashMap(哈希表,检索速度更快,属于空间换时间的模式).FST(Finite-State Transducer,有很好的压缩率)等来实现。
    • 倒排表(Posting List):一篇文章通常由多个词组成,倒排表记录的是某个词在哪些文章中出现过。
    • 正向信息:原始的文档信息,可以用来做排序、聚合、展示等。
    • 段(Segment):索引中最小的独立存储单元。一个索引文件由一个或者多个段组成。在 Lucene中,段有不变性,段一旦生成,在段上只能读取、不可写入。

1.3 Solr和Elasticsearch对比

  • Solr是什么?
    • Solr 是Apache下的一个顶级开源项目,采用lava开发,它是基于Lucene的全文搜索服务器。Sor提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
    • Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr索引的实现方法很简单,用 POST 方法向Solr服务器发送一个描述 Field 及其内容的 XML文档,Solr根据xml文档添加、删除、更新索。Solr 搜索只需要发送 HTTP GET 求,然后对 Sol返回Xm、ison等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面以查询Solr的配置和运行情况。
    • solr是基于lucene开发企业级搜索服务器,实际上就是封装了lucene。
    • Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的AP接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的文件,生成索引;也可以通过提出查找请求,并得到返回结果。
  • 总结:
    • es安装简单,Solr安装略微复杂。
    • Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能。
    • Solr 支持更多格式的数据,比如SON、XML、CSV,而 Elasticsearch 仅支持ison文件格式
    • Solr官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana来支撑。
    • Solr 查询快,但更新索引时慢( 即插入删除慢 ),用于电商等查询多的应用。ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。
    • Solr比较成熟,有一个更大,更成熟的用户、开发和贡献者社区,而 Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。

1.4 数据搜索方式

  • 2种数据类型:
    • 结构化数据:一般放入关系数据库(如 MySQL、Oracle 等),这是因为结构化数据有固定的数据格式和有限个数的字段,因此可以通过二维化的表结构来承载* 。
    • 非结构化数据:一般会放入 MongoDB 中,这是因为非结构化的数据长度不定且无固定数据格式,显然在关系数据库中存储这类数据较为困难。
  • 数据搜索方式:
    • 结构化数据搜索:顺序扫描、关键词精确匹配、关键词部分匹配等。
    • 非结构化数据搜索:顺序扫描和全文检索两种方法。不难看出,对于非结构化数据而言,顺序扫描是效率很低的方法,因此全文检索技术应运而生。
  • 全文检索过程:
    • 在实现全文检索的过程中,一般都需要提取非结构化数据中的有效信息,重新组织数据的承载结构形式。而搜索数据时,需要基于新结构化的数据展开,从而达到提高搜索速度的目的。显而易见,全文检索是一种空间换时间的做法一一前期进行数据索引的创建,需要花费一定的时间和空间,但能显著提高后期搜索的效率。

1.5 搜索引擎

1.5.1 搜索引擎工作流程

在这里插入图片描述

  • 搜索引擎的工作原理分两个阶段,网页数据爬取和索引阶段、搜索阶段。
    • 第一阶段,网页数据爬取和索引阶段。包含网络爬虫、数据预处理、数据索引三个主要动作。
      • 第一步,网络爬虫尽可能快、尽可能全地发现和爬取互联网上的网页,爬取到一个新网页后还要继续通过该页面中的链接来爬取其他网页,是个不间断的工作。
      • 第二步, 网络爬虫爬取到的网页存入网页库,存入过程中会进行查重检查,因为互联网上的网页有一定的重复性。网页库里存储的网页信息与我们在浏览器看到的页面内容相同。
      • 第三步,网页数据预处理程序不断地从网页库中取出网页进行预处理工作,之后网页就被浓缩成以关键词为核心的内容。
        • 常见的预处理动作:去除噪声内容(版权声明文字、导航条、广告等)、关键词处理(如中文分词、去除停止词)、网页间链接关系计算等。
        • 还有各类文件文档(如 PDF、Word、WPS、XLS、PPT、TXT 等)、多媒体文件(如图片、视频)等,这些内容均需进行相应的数据预处理动作。
      • 第四步,数据预处理后,要进行数据索引过程。索引过程先后经历正向索引和倒排索引阶段,最终建立索引库。随着新的网页等内容不断地被加入网页库,索引库的更新和维护往往也是增量进行的。
    • 第二阶段,搜索阶段。包含搜索关键词、输入内容预处理、搜索关键词查询三个主要动作。
      • 第一步,用户输入的关键词。
      • 第二步,对输入内容进行预处理。比如删除不必要的标点符号、停用词、空格、字符拼写错误识别等,然后进行相关的分词。
      • 第三步,分词后搜索引擎系统将向索引库发出搜索请求。
      • 第四步,索引库会将包含搜索关键词的相关网页从索引库中找出来,搜索引擎根据索引库返回的内容进行排序处理,最终返回给用户。

1.5.2 网络爬虫原理流程

  • 什么是网络爬虫?
    • 网络爬虫是我们常说的的俗称,还有别称诸如网络探测器、Crawler 爬行器、Spider 蜘蛛、Robot 机器人等等,只是网络爬虫或网络蜘蛛的叫法更加生动一点,因为网页爬取程序像虫子和蜘蛛一样在网络间爬来爬去,从一个网页链接爬到另一个网页链接。
  • 网络爬虫方式:
    • 一般采用并行爬取的方式,可以提高爬取效率。
  • 网络爬虫的核心工作:
    • 工作核心是在网页搜集效率、质量和对目标网站的友好程度上。
    • 网络爬虫要用最少的资源、最少的时间,搜集尽可能多的高质量网页,同时对目标网站的内容抓取不影响网站的正常运转和使用。

在这里插入图片描述

  • 网络爬虫工作流程:
    • 第一步,网络爬虫在爬取网页时,搜索引擎先会建立两张不同的表。如上图B表记录已经访问过的URL网址,A表记录没有访问过的URL网址。
    • 第二步,当第一个网络爬虫爬取某个外部链接页面 URL 时,会把该网站的URL 下载回来分析,处理好这个 URL 后,将该 URL 存入已经访问过的表中。
    • 第三步,当第二个网络爬虫从其他网站或页面中又发现了这个 URL 时,它会在已访问列表中有对比查看有没有该URL的访问记录。若有,则爬虫程序会自动丢弃该URL,不再访问。
  • 网络爬虫工作策略:
    • 网络爬虫方式有两种,“先深度后广度”和“先广度后深度”。可以把爬取网页的过程想象成一个有向图。
    • 一般采用“先深度后广度”的方式。
  • 网页的收录模式:
    • 全量收集:每次爬取网页都更新全部数据内容。该模式的资源开销大、付出成本高、内容更新的时效性不高、网络宽带消耗高,而且全量更新数据耗时,所以一般定期展开。
    • 增量搜集:这种模式主要用于搜集新网页、搜集更新的网页,删除不存在的页面。当然,相较于全量收集,网络爬虫的系统设计也会复杂一些,但时效性好。
  • 提高网站被抓去的效果方式:
    • 对于网站而言,被各家主流搜索引擎收录是共同的夙愿。所以,网站往往采取一些技术手段告知搜索引擎来抓取内容。
    • 一般网站可以使用SiteMap 。
      • SiteMap 的核心作用就是向网络抓取工具提供一些提示信息,以便它们更有效地抓取网站。
      • SiteMap 的最简单实现形式就是 XML 文件。当然,各家搜索引擎定义的 SiteMap 不尽相同,如百度SiteMap 分为三种格式:txt 文本格式、XML格式和 SiteMap 索引格式。
    • 网站管理员还可以结合 SEO(Search Engine Optimization,搜索引擎优化)来改善网站的被抓取效果。
  • 实现网络爬虫的方式:
    • 对软件开发人员来说,我们可以基于现有的爬虫框架来实现对网络数据的爬取。
    • Java 语言栈的用户可以使用 WebMagicGecco。
    • Python 语言栈的用户可以使用 Scrapy。
    • Go 语言栈的用户可以使用YiSpider。

1.5.3 网页分析

  • 网络爬虫将爬取的网页数据存储到网页库,然后网页分析程序将自动对网页进行分析。分析后,网页数据将变成网页中关键词组、链接与关键词的相关度、网页重要程度等信息。
  • 网页分析主要动作:
    1. 网页内容摘要:一般由网页正文生成,摘要一般会显示在搜索结果的展示区。
    2. 链接分析:链接其实是一种投票、一种信任。网站被主动链接的次数越多,说明互联网环境下其他网站对该网站的投票越多、信任越多,该网站在互联网中越流行。
      • 本质上这就是一种分布式系统下的共识投票。如果将网页间的链接关系视作有向图,则网页的链接关系就会变成入度和出度。入度指网页能通过其他网页的链接来访问;出度指网页中链接了其他网页。因此,入度大网页,说明其被多个网页引用,这也意味着该网页比较权威、比较流行和热门。
    3. 网页重要程度计算:用于衡量网站的权威性。
      • 越权威的网站,越容易被其他网站主动链接。网站被引用的次数越多,说明该网站越重要。对搜索引擎而言,在返回相关性强的内容时,应该尽量先返回权威网站的内容;对搜索引擎的用户而言,这样往往更能匹配他们的需要。因此这也是评价搜索引擎体验好坏的核心指标之一。
    4. 关键词提取分词:中英文分词差异大,英文分词较简单,中文分词常用算法分两类。一类是基于字典的机械式分词,另一类是基于统计的分词。
      • 基于字典的分词方法:一般会按照一定的策略将待分析的汉字串与一个充分大的词典的词条进行匹配,若在词典中找到某个字符串词条,则匹配成功。所以此种方法的核心是字符串的匹配,分为正向匹配和逆向匹配两种。
        • 正向匹配,指的是在匹配字符串时从左向右匹配。
        • 逆向匹配,是从右向左匹配。
        • 正向或逆向匹配过程中,按匹配长度的不同,还可以细分为最大/最长匹配和最小/最短匹配。
        • 基于字典的分词算法一般常用正向最大匹配、逆向最大匹配,或者是组合模式。
      • 基于统计的分词算法:该算法无须词典,一般会根据汉字与汉字相邻出现的概率来进行分词。因此基于统计的分词算法往往需要构建一个语料库,并不断更新。在分词前,算法需要进行预处理,即对语料库中相邻出现的各个字的组合进行统计,计算两个汉字间的组合概率。
    5. 去除噪声:去除如广告、无关的导航条、版权信息、调查问卷等和文章主体内容无关的内容。
  • 内容摘要的生成方式:
    • 静态生成方式:在网页分析阶段即可从网页内容中提取。虽然这种方式“短、平、快”,但缺点也很明显,即当呈现搜索结果时,展示的摘要可能与搜索的关键词无关。
    • 动态生成方式:即根据查询关键词在文档中的位置,提取其周边的文字,并高亮显示。

1.5.4 正排索引和倒排索引

  • 正排索引:
    • 当搜索引擎索引程序提取关键词时,为该页面建立与关键词的对应关系的过程,称做正排索引。
    • 在正排索引中,以网页映射关系为 Key、以分词的列表为 Value。在搜索时是以查询语句的网页映射关系为Key 进行搜索对应的Value值。
      在这里插入图片描述
  • 倒排索引:
    • 当用户在搜索引擎搜索框中输入关键词时,搜索引擎会把和关键词有关的页面展现给用户,这个过程就叫做倒排索引。
    • 在倒排索引种,是以网页映射关系为 Key、以分词的列表为 Value。在搜索时是以查询语句的分词列表为Key 来进行搜索的。
      在这里插入图片描述
  • 总结:
    1. 索引对象还可以分为基于词的索引,和基于字的索引。
    2. 以基于词的索引查询时会更加高效,因为基于词内容比基于字做索引的索引内容少。
    3. 倒排索引中有词条(Term)、词典 (Term Dictionary)、倒排表(Post List)三个名词。
      • 词条,是索引里面最小的存储和查询单元。一般来说,在英文语境中词条是一个单词,在中文语境中词条指的是分词后的一个词组。
      • 词典,又称字典,是词条的集合。单词词典一般是由网页或文章集合中出现过的所有词构成的字符串集合。
      • 倒排表,记录的是词出现在哪些文档里、出现的位置和频率等。在倒排表中,每条记录被称为一个倒排项。
    4. 词典和倒排表是分两部分存储的,词典存储在内存中,倒排表存储在磁盘上。

二、Elasticsearch基础安装

1.2 概述简介

  • Elasticsearch 是一个分布式、可扩展、近实时的高性能搜索与数据分析引擎。Elasticsearch基于 Apache Lucene 构建,采用 Java 编写,并使用 Lucene 构建索引、提供搜索功能。
  • Elasticsearch 的目标是让全文搜索功能的落地变得简单。
  • 特点和优势:
    1. 分布式实时文件存储。Elasticsearch 可将被索引文档中的每一个字段存入索引,以便字段可以被检索到。
    2. 实时分析的分布式搜索引擎。Elasticsearch 的索引分拆成多个分片,每个分片可以有零个或多个副本。集群中的每个数据节点都可承载一个或多个分片,并且协调和处理各种操作:负载再平衡和路由会自动完成。
    3. 高可拓展性。Elasticsearch 可以扩展到上百台服务器,处理 PB 级别的结构化或非结构化数据。
    4. 可插拔插件支持。Elasticsearch 支持多种插件,如分词插件、同步插件、Hadoop 插件可视化插件等。
  • 如下图为最新的数据库排名。

在这里插入图片描述

2.2 安装

在这里插入图片描述

2.2.1 Windows安装

2.2.1.1 安装ES

  • 准备好以下安装包。
  • es依赖java环境,所以也要提前装好java环境,高版本已经内置了java环境。

在这里插入图片描述

  1. 解压es安装包。

在这里插入图片描述

  • 各目录释义:
    • bin :可执行脚本文件,包括es服务启动、插件管理、函数命令等等。
    • config : 配置文件目录,如elasticsearch.yml(ES 配置文件)、jvm.options(java虚拟机相关配置文件)、log4j2.properties(日志配置文件)等等。
    • jdk : 7.x版本之后才有的目录,自带内置的 JDK环境。
    • lib : es依赖的java库。
    • logs : 默认日志文件储存路径。
    • modules : ES 所有功能模块,如Cluster、Discovery、Indices、X-pack 等等。
    • plugins : ES 已经安装的插件,默认没有插件,所以刚开始是空的。
    • data : 默认数据存放目录,包含节点、分片、索引、文档的所有数据。

2.进入bin目录,双击elasticsearch.bat,启动服务。和7.x 版本不同的是,ES 8.x 启动之后会输出以下信息,此时服务已经启动成功了,而7.x版本启动时控制台输出 started 时代表服务启动成功。

在这里插入图片描述
在这里插入图片描述
3.网页访问显示需要输入账号密码。在es7.0版本之后的安装包默认自带了xpack开启密码校验功能。

在这里插入图片描述
4.进入bin目录,为elasticsearch内部用户创建随机密码。也可以重置密码。

elasticsearch-setup-passwords auto

#重置密码命令。
elasticsearch-reset-password -u elastic -i

在这里插入图片描述
5.用新账户密码再次登录成功。

在这里插入图片描述

2.2.1.2 基础设置

2.2.1.2.1 关闭geoip数据库更新

1.我们再回过头来看日志,这里有个报错,是因为启动时会更新地图的一些数据库,关闭geoip数据库的更新操作即可。

启动时会去更新地图的一些数据库,这里直接禁掉即可
2.修改es配置文件,添加如下一行。

vim elasticsearch.yml

#关闭geoip数据库更新。
ingest.geoip.downloader.enabled: false

在这里插入图片描述

2.重启es,之后就没有了。

在这里插入图片描述
3.密码可以访问web端。

在这里插入图片描述

2.2.1.2.2 关闭es密码登录
  • 高版本的es代码里内置默认开启密码登录,我这里测试就去掉密码登录,省事。

1.修改es配置文件,添加如下两行。

vim elasticsearch.yml

#关闭es密码登陆设置。
xpack.security.enabled: false
xpack.security.transport.ssl.enabled: false

在这里插入图片描述

2.重启es,再次访问web端就不需要密码了。
在这里插入图片描述

2.2.1.2.3 设置特定IP访问

1.前面访问都是使用本地主机环回地址访问,若要使用特定IP访问需要修改es配置文件,对如下参数进行修改。

# 为es实例绑定特定的IP地址,若设置成0.0.0.0,则监听本地所有IPV4地址。
network.host: 192.168.0.100

#为es实例设置特定的端口
http.port: 9200

#集群配置项,用于启动当前节点时,发现其他节点的初始列表。必须开启,因为es单节点自认为主节点。
discovery.seed_hosts: ["192.168.0.100"]

在这里插入图片描述
2.重启es,此时就可以通过特定IP访问。

在这里插入图片描述

2.2.1.2 安装es-head插件

在这里插入图片描述
1.直接点击node-v18.13.0-x64.msi程序,安装完成后可以通过node -v查看版本,能查看到则安装成功。

在这里插入图片描述
2.解压es-head安装包,查看package.json文件可以看到,需要安装依赖服务。

在这里插入图片描述
3.安装依赖服务。直接使用npm install安装会报错,版本导致,可以用cnpm install来安装。
在这里插入图片描述

# 网上都是说是npm install可以安装,但是异常慢。
1.安装cnpm。
npm install -g cnpm --registry=https://registry.npm.taobao.org

2.安装依赖。
cnpm install

在这里插入图片描述
4.启动服务,访问网页,但连接会有跨域问题。

npm run start

在这里插入图片描述
在这里插入图片描述
5.配置elasticsearch.yml文件,添加如下三行,解决跨域问题,并允许使用密码连接。

http.cors.enabled: true  #启用http端口,允许跨源REST请求。
http.cors.allow-origin: "*"   #允许所有人请求。
http.cors.allow-headers: Authorization,X-Requested-With,Content-Type,Content-Length   #es设置安全密码后,es-head允许使用密码访问。

.png)
6.重启es,使用密码连接。

http://localhost:9100/?auth_user=es_user&auth_password=es_password

在这里插入图片描述

2.2.1.3 安装Kibana

  • 初识ELK:
    • ELK是Elasticsearch、Logstash、 Kibana三大开源框架首字母大写简称,市面上也被成为Elastic Stack。
    • Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交与的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引警的场景都可以使用Elasticsearch作为底层支持架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es。
    • Logstash是ELK的中央数据流引擎,用于从不同目标( 文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等 )。
    • Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理解。操作简单,基于浏览器的用户界面可以快速创建仪表板( dashboard)实时显示Elasticsearch查询动态。

在这里插入图片描述

在这里插入图片描述

1.下载解压kibana安装包。注意ELK三组件版本需要一致,并且也依赖node.js环境。

在这里插入图片描述
2.进入bin目录启动kibana.bat文件会发现报错,原因是不能使用localhost来访问,需要修改成固定IP地址。

在这里插入图片描述
3.修改kibana配置文件,填写成固定IP。

在这里插入图片描述
4.再次启动,访问web端。

在这里插入图片描述
在这里插入图片描述

  • 也可以修改配置文件,用固定IP来访问。

在这里插入图片描述
在这里插入图片描述

2.2.1.3.1 汉化设置

1.kibana支持汉化,可以在以下目录看到有个中文包。

在这里插入图片描述
2.在kibana配置文件添加汉化设置,i18n.locale: “zh-CN”。

在这里插入图片描述
3.重启kibana,再次登录网页,就是汉字了。

在这里插入图片描述

2.2.2 Linux安装

2.2.2.1 安装es

1.不需要安装java环境。

  • 注意事项:
    • es依赖jdk环境,现在高版本的es压缩包中自带有jdk。
    • 若已提前安装了jdk环境,则es启动时,会优先找linux中的jdk。若此时jdk的版本不一致,就会造成jdk不能正常运行。
    • 所以,若Linux服务本来没有配置jdk,则会直接使用es目录下默认的jdk,反而不会报错。

2.创建用户,不然直接使用root用户启动会报错。

[root@localhost elasticsearch-8.5.2]# useradd es-qingjun
[root@localhost elasticsearch-8.5.2]# chown es-qingjun:es-qingjun -R /opt/elasticsearch-8.5.2/

在这里插入图片描述

3.切换至创建的用户,启动es,可以看到有个初始密码。因为8版本开始默认开启ssl认证的,可以使用https登录web端。

[root@localhost elasticsearch-8.5.2]# su es-qingjun
[es-qingjun@localhost elasticsearch-8.5.2]$ ./bin/elasticsearch

日志释义:

  • es首次启动时,会自动进行安全设置。
    第一步:为传输层和 HTTP 层生成 TLS 证书和密钥。
    第二步:TLS 配置设置被写入elasticsearch.yml
    第三步:为 elastic 用户生成密码。
    第四步:为 Kibana 生成一个注册令牌。

高亮白色字体释义:

  • 第一串高亮白色字符:ES给elastic账户设置的默认密码,需要记下来。
  • 第二串高亮白色字符:CA证书的密钥信息。
  • 第三串高亮白色字符:ES给Kibana生成的访问令牌,Kibana访问ES服务需要用到这个。

在这里插入图片描述
在这里插入图片描述

4.如果不想使用密码登录,可以进入es配置文件关闭ssl认证,再重启es。

[es-qingjun@localhost elasticsearch-8.5.2]$ vim config/elasticsearch.yml
xpack.security.enabled: false  #该参数修改成false。

在这里插入图片描述

[es-qingjun@localhost elasticsearch-8.5.2]$ ./bin/elasticsearch

在这里插入图片描述

在这里插入图片描述

2.2.2.2 安装es-head

1.安装node.js环境,注意版本不要太高,不然会跟linux本身的依赖库包版本冲突报错。

[root@localhost bck]# tar zxf node-v16.9.0-linux-x64.tar.gz 
[root@localhost bck]# mv node-v16.9.0-linux-x64 /usr/local/node

[root@localhost bck]# tail -2 /etc/profile
export node_home=/usr/local/node
export PATH=$node_home/bin:$PATH

[root@localhost bck]# source /etc/profile
[root@localhost bck]# node -v
v16.9.0

在这里插入图片描述
2.解压es-head安装包,安装依赖。注意这里需要进入解压出来的目录里执行命令。

#安装cnpm
[root@localhost elasticsearch-head-5.0.0]# npm install -g cnpm --registry=https://registry.npm.taobao.org

#安装依赖
[root@localhost elasticsearch-head-5.0.0]# cnpm install

在这里插入图片描述
在这里插入图片描述
3.启动es-head

[root@localhost elasticsearch-head-5.0.0]# npm run start

在这里插入图片描述
4.访问页面。
在这里插入图片描述
5.修改es配置文件,添加如下两行,解决跨域问题。

[root@localhost elasticsearch-8.5.2]# vi config/elasticsearch.yml 
http.cors.enabled: true
http.cors.allow-origin: "*"

6.重启es,es-head就可以连接es了。
在这里插入图片描述

2.2.2.3 安装kibana

1.解压安装包,修改配置文件。

[root@localhost bck]# tar zxf kibana-8.5.2-linux-x86_64.tar.gz -C ../
[root@localhost bck]# cd ../kibana-8.5.2/

[root@localhost kibana-8.5.2]# vi config/kibana.yml
server.host: "192.168.130.140"    #修改成固定IP。
elasticsearch.hosts: ["http://192.168.130.140:9200"]   #修改es固定IP。
i18n.locale: "zh-CN"  #汉化。

2.启动kibana,访问网页。

#kibana不能使用root用户启动,可以加这个参数启动,也可以新建一个用户,并对安装目录修改权限。

#方式一:
[root@localhost kibana-8.5.2]# ./bin/kibana --allow-root


#方式二:
[root@localhost kibana-8.5.2]# chmod kibana
[root@localhost kibana-8.5.2]# chown kibana:kibana -R /opt/kibana-8.5.2/
[root@localhost kibana-8.5.2]# su - kibana
[kibana@localhost ~]$ cd /opt/kibana-8.5.2/
[kibana@localhost kibana-8.5.2]$ ./bin/kibana

在这里插入图片描述
在这里插入图片描述

2.2.2.4 设置为系统服务

设置步骤:

  1. 在/etc/systemd/system/目录下添加文件,比如es.service、es.service、kibana.service。
  2. 在文件里添加如下几行,注意要写绝对路径。
  3. 重启。

1.添加系统服务文件。

[root@localhost ~]# cat /etc/systemd/system/es-head.service 
[Unit]
Description=es-head
After=network.target
[Service]
Type=simple
User=es-qingjun
WorkingDirectory=/opt/elasticsearch-head-5.0.0
ExecStart=/usr/local/node/bin/npm run start
Restart=on-failure
LimitNPROC=65536
LimitNOFILE=65536
Environment=NODE_HOME=/usr/local/node
Environment=NODE_PATH=/usr/local/node/lib/node_modules
Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/node/bin
[Install]
WantedBy=multi-user.target

2.重启查看服务状态。

[root@localhost ~]# systemctl  start es-head.service
[root@localhost ~]# systemctl  enable es-head.service

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Elasticsearch基础1——搜索引擎发展史和工作流程、es/es-head/kibana的基础安装 的相关文章

  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 如何通过替换为空页映射来取消映射 mmap 文件

    Linux 用户空间有没有办法用空页面 映射自 dev null 或者可能是一个空页面 重复映射到从文件映射的页面的顶部 对于上下文 我想找到这个 JDK bug 的修复 https bugs openjdk java net browse
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 使用 grep 查找包含所有搜索字符串的行

    我有一个文件 其中包含很多与此类似的行 id 2796 some model Profile message type MODEL SAVE fields account 14 address null modification times
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • Linux中的定时器类

    我需要一个计时器来以相对较低的分辨率执行回调 在 Linux 中实现此类 C 计时器类的最佳方法是什么 有我可以使用的库吗 如果您在框架 Glib Qt Wx 内编写 那么您已经拥有一个具有定时回调功能的事件循环 我认为情况并非如此 如果您
  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • 域套接字“sendto”遇到“errno 111,连接被拒绝”

    我正在使用域套接字从另一个进程获取值 就像 A 从 B 获取值一样 它可以运行几个月 但最近 A 向 B 发送消息时偶尔会失败 出现 errno 111 连接被拒绝 我检查了B域套接字绑定文件 它是存在的 我也在另一台机器上做了一些测试 效
  • 适用于elasticsearch 7.0.1 和 kibana 7.0.1 的 docker-compose.yml

    我在 Windows 10 上将 Docker Desktop 与 Linux 容器结合使用 并希望通过 docker compose 文件启动最新版本的 elasticsearch 和 kibana 容器 使用 6 2 4 等旧版本时一切
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • Pyaudio 安装错误 - “命令‘gcc’失败,退出状态 1”

    我正在运行 Ubuntu 11 04 Python 2 7 1 并想安装 Pyaudio 于是我跑了 sudo easy install pyaudio 在终端中 进程退出并显示以下错误消息 Searching for pyaudio Re
  • CentOS:无法安装 Chromium 浏览器

    我正在尝试在 centOS 6 i 中安装 chromium 以 root 用户身份运行以下命令 cd etc yum repos d wget http repos fedorapeople org repos spot chromium
  • 将 PDF 转换为 600dpi 的 TIFF 和 jpg 96 dpi

    我想使用 ImageMagick 从 Python 脚本将 pdf 转换为 600 dpi 的 tiff 和 96 dpi 的 jpg 我使用 imagemagick 命令行完成了这项任务 但我想使用python中的Imagemagick将
  • 安装J语言的JQt IDE,出现错误

    我一直按照这里的说明进行操作 http code jsoftware com wiki System Installation Linux http code jsoftware com wiki System Installation L
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • iptables通过注释删除特定规则

    我需要删除一些具有相同评论的规则 例如 我有带有 comment test it 的规则 所以我可以像这样获得它们的列表 sudo iptables t nat L grep test it 但是我怎样才能删除所有带有注释 测试它 的 PR

随机推荐

  • 命令行启动anaconda

    命令行启动anaconda anaconda navigator
  • VsCode使用技巧:避免ubuntu版本右键菜单误点

    问题描述 ubuntu版本 16 04 的VsCode 1 69版本 经常在代码界面下单击右键总会点到右键菜单中的某一项上面 只有每次点下的时候把鼠标向左移动再弹起才能避免 比如我们调试时 想把某个变量添加到监视 但是单击右键菜单 老是直接
  • gitlab常用的命令

    引言 使用gitlab提交代码的时候 若是使用的命令行 则需要输入命令行指令 下面是日常遇到的常用的命令行指令 详情 git命令行常用指令的使用 git status 上次提交后是否对文件再做了修改项目1 git add 添加所有的变动 g
  • python中的pass是什么意思_Python中pass的作用与使用教程

    Python中pass的作用与使用教程 Python中pass的作用 空语句 do nothing 保证格式完整 保证语义完整 以if语句为例 在c或c java中 if true do nothing else do something
  • SQLite与MySQL、SQLServer等异构数据库之间数据同步的解决方案

    什么是SQLite DBSync SQLite DBSync是开源嵌入式数据库SQLite的数据同步引擎 实现了SQLite与SQLite数据库之间以及SQLite与异构数据库 Oracle MySQL SQLServer 之间的增量的 双
  • 用Gecco爬虫采集数据

    说起网络爬虫大家首先都会想到python爬虫 但是用Java实现爬虫的也很多 也有很多爬虫框架 今天我想说说我使用什么做爬虫的 其实我也是一个爬虫白痴 刚接触爬虫的时候都是用纯java去做 但是做到一半的时候发现要写的代码真多 所以就找Ja
  • Linux上的虚拟化技术

    虚拟化技术的方法 架构和实现概览 2006年12月29日 虚拟化技术的应用十分广泛 当前虚拟化技术主要关注于服务器的虚拟化 或在单个主机上寄存多个独立的操作系统 本文首先介绍虚拟化技术的原理 然后讨论多个虚拟化技术的实现方法 另外介绍了一些
  • 铱(Iridium)系统的通信体制

    铱系统已经是很老的系统了 但对于我们深刻了解低轨卫星通信系统还是很有帮助的 窥一斑而知全豹 铱系统是世界上第一个LEO全球卫星移动通信系统 1995年1月获得美国联邦通信委员会看许可 1997年5月发射第一颗卫星 1998年5月完成星座布置
  • 【React+TS】从零开始搭建react+typescript+router+redux+less+pxToVw自适应+sass+axios反向代理+别名@+Antd-mobile

    一 通过create react app脚手架创建项目 npx create react app testproject template typescript 在vscode中打开项目 可以看到顺利生成了react项目且组件的后缀为tsx
  • 关于parallelStream()引发线程不安全问题

    一 问题代码 public class ParallelStreamTest public static void main String args List
  • 即兴讲话的万能公式(赶过猪)

    即兴讲话就是在没有充分准备的情况下进行的讲话 很多人在即兴演讲的时候会心跳加速 语无伦次 大脑一片空白 甚至手脚发麻 有时候即使经过准备 演讲稿已经写好了 上台前也背诵过了 但是一到台上还是紧张的 稿子都忘记了 其实造成这种情况 很大部分的
  • ping, ping6 (icmp, icmpv6)

    选项 I interface address Set source address to specified interface address Argument may be numeric IP address or name of d
  • Django 从零开始实现简单的restful应用

    安装Django 我是在windows上安装的 之后在linux上试一下再补充上来 可以通过pip直接安装 pip install django 需要使用到mysql 数据库 pip install mysqlclient 新建项目 安装以
  • Node =》 nodemon

    在编写调试Node js的时候 如果修改了项目的代码 则需要频繁的手动close掉 然后再重新启动 非常频繁 现在可通过nodemon这个工具 能够监听项目文件的变动 当代码被修改后 nodemon会帮我们重新启动项目 极大方便了开发和调试
  • 在CSDN学Golang云原生(git)

    一 git的工作流程 Golang的Git工作流程与其他语言的Git工作流程类似 通常包括以下步骤 创建分支 在本地代码库中创建一个新的分支 该分支用于开发新功能或修复错误 编写代码 在创建的分支上进行编码 并将更改提交到本地版本控制库中
  • 【Egg从基础到进阶】一:Egg项目初始化及基础入门

    目录 Egg js 为企业级框架和应用而生 我们希望由 Egg js 孕育出更多上层框架 帮助开发团队和开发人员降低开发和维护成本 使用Egg 脚手架创建一个Egg项目 node gt 14 20 0 app router app cont
  • Java架构师技术进阶路线图详解

    在企业里 一名架构师已经可以算是高端人物了 但架构师也是需要学习的 任何人与事物都需要学习 下面我们就来了解一下Java架构师到底该如何进阶 请看如下 一 阅读源码 深入的Java学习 经典源码阅读不可少 常见的设计模式 编码必备 Spri
  • 如何给elementui中表格的行设置样式

  • 【C++ 存储和读取二进制文件以及类的实例】

    很多时候程序运行时的数据都以类的对象的形式存储 那么如何将这些对象保存使得下一次运行程序的时候可以直接使用呢 Step 1 gt 首先我们需要知道如何读写二进制文件 inline size t readBinaryFile const ch
  • Elasticsearch基础1——搜索引擎发展史和工作流程、es/es-head/kibana的基础安装

    文章目录 一 搜索引擎 1 1 搜索引擎的发展背景 1 2 Lucene和Elasticsearch 1 3 Solr和Elasticsearch对比 1 4 数据搜索方式 1 5 搜索引擎 1 5 1 搜索引擎工作流程 1 5 2 网络爬