搜索引擎全面总结

一、搜索引擎介绍

1.1 搜索业务问题分析

https://www.jd.com

在互联网项目中,搜索功能随处可见,但是互联网系统的搜索功能不同于一般企业项目的是:

  • 互联网系统的数据量特别大
  • 需要对搜索关键字进行拆词

如果这些搜索业务,我们通过like关键直接对数据库进行模糊查询:

  • 问题 1 :like关键字会对数据表进行全表扫描,效率很低 (500w ---- 4-6s)
  • 问题 2 :mysql数据库不具备分词功能,需要在程序中对关键词进行手动分词操作,业务很繁琐

1.2 搜索引擎介绍

所谓搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出指定的信息反馈给用户的一门检索技术 。搜索引擎依托于多种技术,如网络爬虫技术、检索排序技术、网页处理技术、大数据处理技术、自然语言处理技术等,为信息检索用户提供快速、高相关性的信息服务。搜索引擎技术的核心模块一般包括爬虫、索引、检索和排序等,同时可添加其他一系列辅助模块,以为用户创造更好的网络使用环境

搜索方式
搜索方式是搜索引擎的一个关键环节,大致可分为四种:全文搜索引擎、元搜索引擎、垂直搜索引擎和目录搜索引擎,它们各有特点并适用于不同的搜索环境
搜索引擎的两大作用

  • 优化了检索速度(基于倒排索引表进行检索),提高数据搜索的效率
  • 具有分词功能,可以对用户输入的搜索关键词进行拆分

二、Lucene简介

目前市面上使用最多的搜索引擎是ElasticSearch 和 Solr,而ElasticSearch 和 Solr都是基于lucene的底层实现

2.1 Doug Cutting

Lucene是Apache Jakarta家族中的一个开源项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎、索引引擎和部分文本分析引擎。
Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻。在Java开发环境里
Lucene是一个成熟的免费开源工具,是目前最为流行的基于 Java 开源全文检索工具包。

  • 数据总体分为两种:
    • 结构化数据:指具有固定格式或有限长度的数据,如数据库、元数据等
    • 非结构化数据:指不定长或无固定格式的数据,如邮件、word文档等磁盘上的文件
  • 对于结构化数据的全文搜索很简单,因为数据都是有固定格式的,例如搜索数据库中数据使用SQL语句即可
  • 对于非结构化数据,有以下两种方法:
    • 顺序扫描法(Serial Scanning)
    • 全文检索(Full-text Search)

顺序扫描法 :如果要找包含某一特定内容的文件,对于每一个文档,从头到尾扫描内容,如果此文档包含此字符串, 则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件,因此速度很慢。
全文检索 :将非结构化数据中的一部分信息提取出来,重新组织,使其变得具有一定结构,然后对此有一定结构的数 据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。

2.3 Lucene全文检索流程

在这里插入图片描述

  • 创建索引过程,对要搜索的原始内容进行索引构建一个索引库。索引过程包括:确定原始内容即要搜索的内容→采集文档→创建文档→分析文档→索引文档。
  • 搜索索引过程,从索引库中搜索内容。搜索过程包括:用户通过搜索界面→创建查询→执行搜索,从索引库搜索→ 渲染搜索结果。

2.3.1 创建索引

对文档索引的过程,将用户要搜索的文档内容进行索引,索引存储在索引库(index)中。 这里我们要搜索的文档是 磁盘上的文本文件,根据案例描述:凡是文件名或文件内容包括关键字的文件都要找出来,这里要对文件名和文件内容创建索引。
在这里插入图片描述

获得原始文档
原始文档是指要索引和搜索的内容。原始内容包括互联网上的网页、数据库中的数据、磁盘上的文件等。
创建文档对象
获取原始内容的目的是为了索引,在索引前需要将原始内容创建成文档(Document),文档中包括一个一个的域 (Field),域中存储内容。 这里我们可以将磁盘上的一个文件当成一个document,Document中包括一些 Field(file_name文件名称、file_path文件路径、file_size文件大小、file_content文件内容),如下图:
注意:

  • 每个Document可以有多个Field,不同的Document可以有不同的Field
  • 每个文档都有一个唯一的编号,就是文档id。

分析文档对象
将原始内容创建为包含域(Field)的文档(document),需要再对域中的内容进行分析,分析的过程是经过对原始文档提取单词、将字母转为小写、去除标点符号、去除停用词等过程生成最终的语汇单元,可以将语汇单元理解为一 个一个的单词。 比如下边的文档经过分析如下:
原文档内容:

Lucene is a Java full-text search engine. Lucene is not a complete
application, but rather a code library and API that can easily be used to
add search capabilities to applications.

分析后得到的语汇单元:

lucene、java、full、search、engine...

每个单词叫做一个Term,不同的域中拆分出来的相同的单词是不同的term。term中包含两部分一部分是文档的域名,另一部分是单词的内容。 例如:文件名中包含apache和文件内容中包含的apache是不同的term。

创建索引—倒排索引

对所有文档分析得出的语汇单元进行索引,索引的目的是为了搜索,最终要实现只搜索被索引的语汇单元从而找到 Document(文档)
注意:创建索引是对语汇单元索引,通过词语找文档,这种索引的结构叫倒排索引结构。 传统方法是根据文件找到 该文件的内容,在文件内容中匹配搜索关键字,这种方法是顺序扫描方法,数据量大、搜索慢。 倒排索引结构是根 据内容(词语)找文档,如下图:
在这里插入图片描述

倒排索引结构也叫反向索引结构,包括索引和文档两部分,索引即词汇表,它的规模较小,而文档
集合较大。

2.3.2 查询索引

查询索引也是搜索的过程。搜索就是用户输入关键字,从索引(index)中进行搜索的过程。根据关键字搜索索引, 根据索引找到对应的文档,从而找到要搜索的内容(这里指磁盘上的文件)。
在这里插入图片描述

用户查询接口
全文检索系统提供用户搜索的界面供用户提交搜索的关键字,搜索完成展示搜索结果。Lucene不提供制作用户搜索界面的功能,需要根据自己的需求开发搜索界面。
创建查询
用户输入查询关键字执行搜索之前需要先构建一个查询对象,查询对象中可以指定查询要搜索的Field文档域、查询关键字等,查询对象会生成具体的查询语法,例如: 语法 “fileName:lucene”表示要搜索Field域的内容为“lucene”的文档
执行查询
搜索索引过程: 根据查询语法在倒排索引词典表中分别找出对应搜索词的索引,从而找到索引所链接的文档链表。 比如搜索语法为“fileName:lucene”表示搜索出fileName域中包含Lucene的文档。搜索过程就是在索引上查找域为 fileName,并且关键字为Lucene的term,并根据term找到文档id
列表。
渲染查询结果
以一个友好的界面将查询结果展示给用户,用户根据搜索结果找自己想要的信息,为了帮助用户很快找到自己的结 果,提供了很多展示的效果,比如搜索结果中将关键字高亮显示,百度提供的快照等。

2.4 分词器

1.分词器作用 :在创建索引时,使用功能分词器对file数据进行分析,生成term 在查询索引时,对输入的查询关键词也需要使用分词器进行分词
2.搜索引擎默认的分词器不支持中文分词,我们通常会配置IK分词器来使用
3.常用的中文分词规则:单字分词、二分法分词、词库分词
4.ik分词器使用的词库分词,不过提供了两种方式:

  • ik_max_word: 会将文本做最细粒度的拆分
  • ik_smart: 会做最粗粒度的拆分

2.4.1 分词器的作用

a. 在 创建索引 的时候需要用到分词器,在 使用字符串搜索 的时候也会用到分词器,并且这两个地方要使用同一个 分词器,否则可能会搜索不出来结果。
b. 在 搜索 时将输入的搜索关键词进行拆分,分词器(Analyzer)的作用是把一段文本中的词按规则取出所包含的所有词,对应的是Analyzer类,这是一个抽 象类(public abstract classorg.apache.lucene.analysis.Analyzer),切分词的具体规则是由子类实现的,所以对于不 同的语言规则,要有不同的分词器。

2.4.2 英文分词器的原理

a.英文的处理流程为:输入文本,词汇切分,词汇过滤(去除停用词),词干提取(形态还原)、大写转小
写,结果输出。
b. 何为形态还原,意思是:去除单词词尾的形态变化,将其还原为词的原形,这样做可以搜索出更多有
意义的结 果,比如在搜索student的时候,同事也可以搜索出students的结果。
c. 任何一个分词法对英文的支持都是还可以的。

2.4.3 中文分词器的原理

中文分词比较复杂,并没有英文分词那么简单,这主要是因为中文的词与词之间并不是像英文那样用空格来隔 开,因为不是一个字就是一个词,而且一个词在另外一个地方就可能不是一个词,如:“我们是中国人”,"是中"就不是一 个词,对于中文分词,通常有三种方式:单字分词、二分法分词、词典分词。

  • 单字分词 :就是按照中文一个字一个字的进行分词,比如:“我们是中国人”,分词的效果就是"我",“们”,“是”,“中”,“国”,“人”,StandardAnalyzer分词法就是单字分词。
  • 二分法分词 :按照两个字进行切分,比如:“我们是中国人”,分词的效果就是:“我们”,“们是”,“是 中”,“中国”,“国人”,CJKAnalyzer分词法就是二分法分词
  • 词库分词 :按照某种算法构造词,然后去匹配已建好的词库集合,如果匹配到就切分出来成为词语,通常词 库分词被认为是最好的中文分词算法,如:“我们是中国人”,分词的效果就是:“我
    们”,“中国人”,极易分词 MMAnalyzer、庖丁分词、IkAnalyzer等分词法就是属于词库分词。

2.4.4 停用词的规

有些词在文本中出现的频率非常高,但是对文本所携带的信息基本不产生影响,例如英文的"a、an、the、of"或中文 的"的、了、着、是",以及各种标点符号等,这样的词称为停用词,文本经过分词处理后,停用词通常会被过滤掉, 不会被进行索引,在检索的时候,用户的查询中如果含有停用词,检索系统也会将其过滤掉,这是因为用户输入查询字符串也要进行分词处理,排除停用词可以提升建立索引的速度,减小索引库文件的大小。

2.4.5 常用分词器

  • WhitespaceAnalyzer
    仅仅是去掉了空格,没有其他任何操作,不支持中文。
  • SimpleAnalyzer
    将除了字母以外的符号全部去除,并且将所有字符变为小写,需要注意的是这个分词器同样把数据也去除了,同样不支持中文。
  • StopAnalyzer
    这个和SimpleAnalyzer类似,不过比他增加了一个的是,在其基础上还去除了所谓的stopwords,比如the, a, this这些。这个也是不支持中文的。
  • StandardAnalyzer
    英文方面的处理和StopAnalyzer一样的,对中文支持,使用的是单字切割。
  • CJKAnalyzer
    这个支持中日韩,前三个字母也就是这三个国家的缩写。这个对于中文基本上不怎么用吧,对中文的支持很烂,它是 用每两个字作为分割,分割方式个人感觉比较奇葩,我会在下面比较举例。
  • SmartChineseAnalyzer
    中文的分词,比较标准的中文分词,对一些搜索处理的并不是很好。
  • IKAnalyzer
    中国人自己开发,对于中文分词比较精准

2.4.6 IK 分词器

Elasticsearch中文分词我们采用Ik分词,ik有两种分词模式:ik_max_word和ik_smart模式;
ik_max_word 和 ik_smart 什么区别?

  • ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民, 中华,华人,人民共和国,人民,人,民,共和国,共和,和国,国歌”,会穷尽各种可能的组合;
  • ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民,共和国,国歌”。索引时,为了提供索引的覆盖范围,通常会采用ik_max_word分析器,会以最细粒度分词索引,搜索时为了提高搜索准确度,会采用ik_smart分析器,会以粗粒度分词我们可以使用网上的一些工具查看分词的效果,比如https://www.sojson.com/analyzer

2.5 lucene全文检索与数据库查询的比较

2.5.1 性能上

数据库 :比如我要查找某个商品,根据商品名,比如select * from product where doctname like%keywords%,这 样查询的话对于数据量少是可以的,可是一旦你的数据量巨大几万几十万的时候,你的性能将会极大的减弱。
lucene : 全文检索,建立一个索引库,一次建立多次使用。在索引库里面会把所有的商品名根据分词器建立索引,就 好比新华字典,索引对应document,比如输入衬衫,那么就会根据索引迅速的翻到衬衫对应的商品名,时间迅速, 性能很好。

2.4.2 相关度排序

相关度:搜索出来的数据与关键词之间的相关程度
“千锋教育”
①我在千锋教育学习 ----- 1
②千锋总部在北京 -------- 0.
③做真实的自己,用良心做教育 ---- 0.
数据库 :数据库要实现该功能也是可以的,可是需要改变表的结构,添加一个字段,然后该字段用于排名,最后查询 的时候order by 一下
lucene : 查询出来的document都有一个算法(得分),根据算法可以计算得分,得分越高的排名越靠前,比如百度 搜索一个东西,一般排名靠前的得分越高,得分通过算法,可以人工控制,比如百度推广,企业给的钱多得分自然 高,因此排名靠前

2.4.3 准确性

数据库 :select * from product where doctname like %ant%,搜索出来的可以是plant,aplant,planting等等,准确性不高
lucene :通过索引查询的,就好像你查字典一样,准确性比数据库的模糊查询高许多

三、ElasticSearch简介

如果我们把Luence比作一个发动机,ElasticSearch 就相当于一辆汽车

3.1 ElasticSearch vs Lucene的关系

ElasticSearch vs Lucene的关系,简单一句话就是,成品与半成品的关系。
( 1 )Lucene专注于搜索底层的建设,而ElasticSearch专注于企业应用。
( 2 )Luncene是单节点的API,ElasticSearch是分布式的—为集群而生。
( 3 )Luncene需要二次开发,才能使用。不能像百度或谷歌一样,它只是提供一个接口需要被实现才能使用, ElasticSearch直接拿来用。

3.2 ElasticSearch与Solr对比

Solr与elasticsearch是当前两大最流行的搜索应用服务器,他们的底层都是基于lucene。

  • Elasticsearch是分布式的,不需要其他组件,Solr 利用Zookeeper 进行分布式管理,而Elasticsearch 自身带 有分布式协调管理功能
  • Elasticsearch设计用于云计算中,处理多租户不需要特殊配置,而Solr则需要更多的高级设置。
  • 当单纯的对已有数据进行搜索时,Solr更快,实时建立索引时, Solr会产生io阻塞,查询性能较差,Elasticsearch 具有明显的优势,随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化

Elasticsearch与Solr的性能测试比较 :
当单纯的对已有数据进行搜索时,Solr更快
在这里插入图片描述

当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势
在这里插入图片描述

随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化
在这里插入图片描述

3.3 Elasticsearch特性

3.3.1 安装管理方便

Elasticsearch没有其他依赖,下载后安装非常方便;只用修改几个参数就可以搭建起来一个集群。

3.3.2 大规模分布式

Elasticsearch允许你开始小规模使用,但是随着你使用数据的增长,它可以建立在横向扩展的开箱即用。当你需要更多的容量,只需添加更多的节点,并让集群重组,只需要增加额外的硬件,让集群自动利用额外的硬件。

可以在数以百计的服务器上处理PB级别的数据。

节点对外表现对等(每个节点都可以用来做入口);加入节点自动均衡,可以扩展到上百台服务器,处理PB级别的 结构化或非结构化数据。
Elasticsearch致力于隐藏分布式系统的复杂性。以下这些操作都是在底层自动完成的:

  • 将你的文档分区到不同的容器或者分片(shards)中,它们可以存在于一个或多个节点中;
  • 将分片均匀的分配到各个节点,对索引和搜索做负载均衡;
  • 冗余每一个分片,防止硬件故障造成的数据丢失;
  • 将集群中任意一个节点上的请求路由到相应数据所在的节点;
  • 无论是增加节点,还是移除节点,分片都可以做到无缝的扩展和迁移

3.3.3 多租户支持

ES处理多租户不需要特殊配置,可根据不同的用途分索引;可以同时操作多个索引。
ES 的多租户简单的说就是通过多索引机制同时提供给多种业务使用,每种业务使用一个索引。我们可以把索引理解 为关系型数据库里的库,那多索引可以理解为一个数据库系统建立多个库给不同的业务使用。
在实际使用时,我们可以通过每个租户一个索引的方式将他们的数据进行隔离,并且每个索引是可以单独配置参数的 (可对特定租户进行调优),这在典型的多租户场景下非常有用:例如我们的一个多租户应用需要提供搜索支持,这 时可以通过 ES 根据租户建立索引,这样每个租户就可以在自己的索引下搜
索相关内容了

3.3.4 高可用性

Elasticsearch集群是有弹性的 - 他们会自动检测到新的或失败的节点,以及重组和重新平衡数据,以确
保数据安全。

3.3.5 操作持久化

Elasticsearch把数据安全第一。文档改变被记录在群集上的多个节点上的事务日志(transaction logs)中
记录,以减少 任何数据丢失的机会。

3.3.6 友好的RESTful API

如果我们想要从ES中查询数据,是通过HTTP协议实现的
Elasticsearch是API驱动。几乎任何动作都可以用一个简单的RESTful API使用JSON基于HTTP请求。ElasticSearch 提 供多种语言的客户端 API。

  • http协议有多种请求方式
    • get-----查询操作
    • post—创建操作
    • put----增加、修改操作
    • delete—删除操作

3.4 典型使用案例

  • 维基百科使用Elasticsearch来进行全文搜做并高亮显示关键词,以及提供search-as-you-type、did-you-mean 等搜索建议功能。
  • 英国卫报使用Elasticsearch来处理访客日志,以便能将公众对不同文章的反应实时地反馈给各位编辑。
  • StackOverflow将全文搜索与地理位置和相关信息进行结合,以提供more-like-this相关问题的展现。
  • GitHub使用Elasticsearch来检索超过 1300 亿行代码。
  • Goldman Sachs使用它来处理5TB数据的索引,还有很多投行使用它来分析股票市场的变动。

四、Elasticsearch逻辑结构

集群/实例–>index(索引)–>types(类型)–>document(文档)–>field(字段)
在这里插入图片描述

4.1 索引(index)

索引是ElasticSearch存放数据的地方,可以理解为关系型数据库中的一个数据库。
事实上,我们的数据被存储和索引 在分片(shards)中,索引只是一个把一个或多个分片分组在一起的逻辑空间。然而,这只是一些内部细节——我们的 程序完全不用关心分片。对于我们的程序而言,文档存储在索引(index)中。剩下的细节由Elasticsearch关心既可。

索引的名字必须是全部小写,不能以下划线开头,不能包含逗号

4.2 类型(type)

类型用于区分同一个索引下不同的数据类型,相当于关系型数据库中的表。在Elasticsearch中,我们使用相同类型 (type)的文档表示相同的“事物”,因为他们的数据结构也是相同的。每个类型(type)都有自己的映射(mapping)或者结 构定义,就像传统数据库表中的列一样。所有类型下的文档被存储在同一个索引下,但是类型的映射(mapping)会告 诉Elasticsearch不同的文档如何被索引。

es 6.0 开始不推荐一个index下多个type的模式,并且会在 7.0 中完全移除。在7.0 的index下是无法创建多个type

4.3 文档(document)

文档是ElasticSearch中存储的实体(对象),类比关系型数据库,每个文档相当于数据库表中的一行数据。 在Elasticsearch 中,文档(document)这个术语有着特殊含义。它特指最顶层结构或者根对象(rootobject)序列化成的JSON数据(以 唯一ID标识并存储于Elasticsearch中)。

4.4 字段(fields)

文档由字段组成,相当于关系数据库中列的属性,不同的是ES的不同文档可以具有不同的字段集合。

五、Elasticsearch安装

5.1 Elastic 和 ElasticSearch

Elastic 是一个品牌,主要包含三个核心产品:

  • ElasticSearch
  • Logstash

Kibana ElasticSearch 是Elastic 品牌下的具体产品

Elastic官网:https://www.elastic.co/cn/

Elastic有一条完整的产品线及解决方案:Elasticsearch、Logstash、Kibana等,这三个就是大家常说的ELK技术栈。
ELK是一个用户服务器的日志搜集、整理、分析、呈现及查询的日志管理系统:
在这里插入图片描述

Elasticsearch官网https://www.elastic.co/cn/products/elasticsearch

5.2 windows下的安装

官网下载 7.6.1版本:
elasticsearch-7.6.1-windows-x86_64.zip
kibana-7.6.1-windows-x86_64.zip
JDK安装和环境变量配置(es是基于java)
下载windows版本的elasticSearch,解压指定目录,启动es ----
es_home/bin/elasticsearch.bat
下载windows版本的kibana,解压指定目录,启动kibana---- kibana_home/bin/kibana.bat

5.3 Linux下安装ES

5.3.1 安装ES

出于安全考虑,elasticsearch默认不允许以root账号运行,因此我们需要创建一个新的用于来管理
——es
创建用户设置密码
检查JDK版本(需要JDK1.8+)
将ES的压缩包上传至/usr/local目录并解压
[root@localhost ~]# useradd es
[root@localhost ~]# passwd es
Changing password for user es.
New password: 【admin123】
Retype new password:
[root@localhost ~]# chmod 777 /usr/local 【授予es用户/usr/local目录 可读可写
可执行权限】
[root@localhost ~]# su - es
[es@localhost ~]$
[es@localhost ~]# java -version
openjdk version “1.8.0_222-ea”
OpenJDK Runtime Environment (build 1 .8.0_222-ea-b03)
OpenJDK 64 -Bit Server VM (build 25 .222-b03, mixed mode)
[es@localhost local]$ tar -zxvf elasticsearch-7.6.1-linux-x86_64.tar.gz

5.3.2 配置ES

在Linux上,ES解压之后,需要进行一定的配置方可运行
查看配置文件
修改 jvm.options
Elasticsearch基于Lucene的,而Lucene底层是java实现,因此我们需要配置jvm参数
修改 elasticsearch.yml
修改集群节点信息
修改数据文件和日志文件存储目录路径(如果目录不存在则需创建)
修改绑定的ip,默认只允许本机访问,修改为0.0.0.0后则可以远程访问
配置信息说明
[es@localhost local]# cd elasticsearch-7.6.1/config/
[es@localhost config]# ls
elasticsearch.yml jvm.options log4j2.properties role_mapping.yml roles.yml
users users_roles
[es@localhost config]# vim jvm.options
默认配置如下
Xms represents the initial size of total heap space
#Xmx represents the maximum size of total heap space
-Xms1g
-Xmx1g
---------------------------------- Cluster ---------------------------

cluster.name: my-application
------------------------------------ Node ----------------------------

node.name: node-
--------------------------------- Discovery --------------------------

cluster.initial_master_nodes: [“node-1”]
[root@localhost config]# vim elasticsearch.yml
---------------------------- Paths ------------------------------
path.data: /usr/local/elasticsearch-7.6.1/data
path.logs: /usr/local/elasticsearch-7.6.1/logs
---------------------------- Network ------------------------------
默认只允许本机访问,修改为0.0.0.0后则可以远程访问
network.host: 0.0.0.
目前我们是做的单机安装,如果要做集群,只需要在这个配置文件中添加其它节点信息即可。
进入elasticsearch/bin目录运行

5.4 启动错误问题总结

错误 1 :内核过低
我们使用的是centos6,其linux内核版本为2.6。而Elasticsearch的插件要求至少3.5以上版本。不过没
关系,我们禁 用这个插件即可。
修改elasticsearch.yml文件,在最下面添加如下配置:
[es@localhost elasticsearch-7.6.1]# cd /usr/local/elasticsearch-7.6.1/bin
[es@localhost elasticsearch-7.6.1]# ./elasticsearch

  • soft nofile 666666666
  • hard nofile 131072
  • soft nproc 4096
  • hard nproc 4096
    bootstrap.system_call_filter: false
    然后重启
    错误 2 :文件权限不足
    我们用的是es用户,而不是root,所以文件权限不足。
    首先用root用户登录,然后修改配置文件:
    添加下面的内容:
    错误 3 :线程数不够
    这是线程数不够
    继续修改配置
    修改下面的内容:
    改为
    执行 vim /etc/security/limits.conf,在文件最后添加:
    错误 4 :进程虚拟内存
    vm.max_map_count:限制一个进程可以拥有的VMA(虚拟内存区域)的数量
    使用root用户,修改配置文件, vim /etc/sysctl.conf 添加下面内容:
    vim /etc/security/limits.conf
  • soft nofile 65536
  • hard nofile 131072
  • soft nproc 4096
  • hard nproc 4096
    [1]: max number of threads [1024] for user [es] is too low, increase to at least
    [4096]
    vim /etc/security/limits.d/20-nproc.conf
  • soft nproc 1024
  • soft nproc 4096
  • soft nproc 65535
  • hard nproc 65535
    [3]: max virtual memory areas vm.max_map_count [65530] likely too low, increase
    to at least [262144]
    vm.max_map_count= 655360
    修改完成之后在终端执行
    错误 5 :未设置节点
    修改elasticsearch.yml

六、安装Kibana

Kibana是一个基于Node.js的Elasticsearch索引库数据统计工具,可以利用Elasticsearch的聚合功能,
生成各种图 表,如柱形图,线状图,饼图等。
而且还提供了操作Elasticsearch索引数据的控制台,并且提供了一定的API提示,非常有利于我们学习
Elasticsearch 的语法。

6.1 安装

kibana版本与elasticsearch保持一致,也是7.6.1解压到特定目录即可

6.2 配置

进入安装目录下的config目录,修改kibana.yml文件:

6.3 运行

进入安装目录下的bin目录启动:
发现kibana的监听端口是 5601
如果在云主机安装es和kibana,注意防火墙放行端口
我们访问:http://47.96.11.185:
##然后执行命令
sysctl -p
the default discovery settings are unsuitable for production use; at least one of
[discovery.seed_ho…]
cluster.name: my-application
node.name: node-
cluster.initial_master_nodes: [“node-1”]
tar -zxvf kibana-7.6.1-linux-x86_64.tar.gz
server.port: 5601
server.host: “0.0.0.0”
./kibana

6.4 控制台

七、安装IK分词器

7.0 IK分词器介绍

IK 分词器
Elasticsearch中文分词我们采用Ik分词,ik有两种分词模式:ik_max_word和ik_smart模式;
ik_max_word 和 ik_smart 什么区别?
ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和
国,中华人民, 中华,华人,人民共和国,人民,人,民,共和国,共和,和国,国歌”,会穷尽各种可能的组合;
ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民,共和国,国歌”。
索引时,为了提供索引的覆盖范围,通常会采用ik_max_word分析器,会以最细粒度分词索引,搜
索时为了提高搜索准确度,会采用ik_smart分析器,会以粗粒度分词
我们可以使用网上的一些工具查看分词的效果,比如https://www.sojson.com/analyzer

7.1 安装ik分词器

分词器配置完成以后,重启es

7.2 测试分词器

访问kibana: http://ip:

7.3 配置自定义词库

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
[软件功能]: 本软件用于从搜索引擎或者具体网页上提取链接,主要用途是搜索留言本、论坛、blog等地址 通过您设定的关键词 软件自动在搜索引擎结果里提取符合条件的连接 本软件把超链接分为两部分看待:连接和连接名称 通过对这两部分的设定来提取符合要求的连接 可以设定只提取含有某“特征词”的网址 也可以设定过滤含有某“特征词”的网址(针对链接) 可以设定只提取链接名称含有某“特征词”的网址 也可以设定过滤链接名称含有某“特征词”的网址(针对链接名称) 提取搜索结果是一门技术,需要一定的电脑和网络基础,本软件是为懂电脑和网络的人设计的 本软件是免费软件,不对外提供服务(本人的全系列客户除外) [参数说明]: 本软使用的关键在于正确设置各项参数,参数设置对了,链接也就提出来了 关键词或网址:如果从搜索引擎里提取 就填写关键词 比如 签写留言(提取留言本) 、Powered by Discuz(提取discuz类型的论坛) 如果是从某页面提取 就填写完整的网址 比如 http://club.sohu.com/map/club_map.htm 链接必含词汇: 就是规定提出来的链接必须含有什么词汇 比如提取留言本 就可以设定 wbook.asp、gb_sign.asp、upfile.asp、feedback.asp 这些常用的留言本文件名称 也可以留空,表示所有的网址都要 链接排除词汇:如果你不希望提取的网址含有某个词汇 就写上 这个一般不要动,不要修改默认的,更不能留空 链连名称必含: 就是提取连接时,链接名称里面必须含有的词汇 这个一般不要动,留空即可 链连名称排除: 就是提取连接时,链接名称里面不能含有的词汇 这个一般不要动,不要修改默认的,更不能留空 间隔或者限时:因为google禁止连续不停的快速搜索,所以本软件对百度和google采用不同的方式提取 对百度是连续性的 对google是固定间隔时间的不断提取 限时: 处理某一个页面允许的最长时间 超过限时就刷新重试 (针对百度) 间隔: 隔多久提取下一页(针对google,默认15秒,尽量不要修改) 过滤相似: 这个参数对应着搜索引擎的两种搜索模式,一般都要选上它,不熟悉搜索引擎的不要改 设置好各项参数后点击<提取>按钮即可,软件开始提取, 软件左下角会显示进度,提取完了会显示提取完毕 举例说明: 一、如果想从搜索引擎里提取某些网址 A.比如想提取一些留言本地址 首先 选择要用的搜索引擎(百度或者google) 然后输入关键字“签写留言” --如要教育类的留言本,就输“签写留言 教育” --如不要带验证码的就输“签写留言 教育 -验证码” 关键词选择学问很大,需仔细琢磨 其次选择链接必含词汇 --词汇那儿可以不填,这样可以提取出所有类型的留言本 --如果需要某一类型的留言本,就填上该类型的留言本地址中都有的词汇 比如 "write.asp"、"upfile.asp"、"leaveword.asp"、"add.asp"等等 其它参数可以不动 最后点<提取>按钮。软件就开始搜索,并不断把搜索到的相关网址添加到左边列 同时列表下方会显示提取了多少页,直到全部页面提取完毕。 B.比如想提取一些动网论坛地址 请先选择要用的搜索引擎(百度和google),然后输入关键字“Powered By Dvbbs”。 因为大多数论坛地址都含有“bbs”,所以你可以设定"bbs"为必含词汇,也可以不输入 其它参数可以不动。 直接点<提取>按钮。软件就开始搜索,并不断把搜索到的相关网址添加到左边列表里 同时列表下方会显示提取了多少页,直到全部页面提取完毕。 二、如果想从某具体网页上提取某些网址 请先输入该网页完整的具体网址 然后输入要提取的网址里面必含词汇,也可以输入排除词汇 然后点提取即可把你想要的网址一次性提出来。 比如想要搜狐论坛列表 http://club.sohu.com/map/club_map.htm 里的所有论坛栏目地址 首先输入网址 http://club.sohu.com/map/club_map.htm 我们可以发现该页面上论坛栏目地址都含有list这个词,所以把“list”作为必含词汇 然后点<提取>按钮,就可以把所有的搜狐论坛栏目地址都提出来了 注意事项: a.如果想提取全部网址,只需把必含词汇设为“http”或者留空 b.用不同特征词从搜索引擎提取某一类网址时,链接排除词汇的设定可以避免重复提取 c.一般情况下不要改动排除词汇的设定,默认设置不影响正常提取
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是二次元穿越来的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值