2.Elasticserach入门基础知识


写在前面,作者最近因为工作上面的业务需求,涉及到搜索相关的业务,在工作的过程中,把个人相关的学习过程记录下来,希望可以和大家一同分享,并希望后续可以有持续的互动及改进。主要参考 Elasticserach官方文档.

1、Elasticsearch是什么

Elasticsearch简称ES,是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎,是当前主流的企业级搜索引擎。Elasticsearch还是一个分布式数据库,其中每个字段均是被索引的数据且可以被搜索,它能够扩展至数以百计的服务器存储及处理PB级别的数据。它提供了一个分布式服务,可以近乎于准实时的存储、查询和分析超大数据集,通常被用来作为构建复杂查询特性和需求强大应用的基础引擎或技术。

2、全文搜索

全文搜索(Full Text Search)是指计算机搜索程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,搜索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户。Lucene是目前全球使用最广的全文搜索引擎开源库。

2.1 Luence介绍

Lucene是Apache软件基金会中一个开放源代码的全文搜索引擎工具,由java语言编写实现,提供了完整的查询引擎和搜索引擎,部分文本分析引擎。Lucene的目的是为软件开发者提供一个简单易用的工具包,以方便在目标系统中实现全文检索的功能,或者是以此为基础建立搜索引擎。Solr和ElasticSearch都是以Luence为基础实现的,是目前广泛使用的搜索引擎。

2.2 倒排索引

倒排索引(Inverted Index),顾名思义,倒排索引对应的是正向索引(Forward Index)。在搜索引擎中,由于在实际应用中需要根据属性的值来查找记录,这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引。

倒排索引中的索引对象是文档中的关键词,用来存储单词在文档中的存储位置,从而形成对文档的检索机制。搜索引擎的关键就是建立倒排索引,倒排索引一般表示为一个关键词、出现次数、在文档中的位置。
Luence中使用的就是倒排索引结构,下面用示例简单介绍一下(下面的示例来自于《Elasticsearch技术解析与实战》一书):

假设有两篇文章,内容分别如下:
文章1: Tom lives in Guangzhou, I live in Guangzhou too.
文章2: He once lived in Shanghai.

1.获取关键词

一般可以通过分词器获取文档内容的关键词,英文的分词器比较容易解决,中文的分词器稍微复杂一些,如:IKAnalyzer。在这里,英文分词结果会把一些没有实际意义的词语去除,如:in,once,too等,也会把时态去除。最终分词可能显示如下:

文章1: [tom] [live] [guangzhou] [i] [live] [guangzhou]
文章2: [he] [live] [guangzhou]

2.建立倒排索引

确定关键词之后,就可以家里倒排索引,对应为(关键词-> 文章号),如下:

关键词文章号
guangzhou1
he2
i2
live1, 2
shangahi2
tom1

通常仅仅知道关键词在哪些文章中出现还不够,还需要知道出现的次数和位置,这里的位置主要选用了关键词位置,如下:

关键词文章号[出现频率]出现位置
guangzhou1[2]3,6
he2[1]1
i1[2]4
live1[2] ; 2[1]2,5 ; 2
shangahi2[1]1
tom1[1]1

以guangzhou为例,1[2]说明在文章1中出现了两次,3,6分别代表出现的位置。通过建立的倒排索引,就可以通过关键词快速定位到具体某篇内容的位置。

3、术语

3.1 集群 (cluster)

一个Elasticsearch集群由一个或多个ES节点组成,并提供集群内所有节点的联合索引和搜索能力(所有节点共同存储数据)。一个集群被命名为唯一的名字(默认为elasticsearch),集群名称非常重要,因为节点需要通过集群的名称加入集群。当需要多个集群时,要确保每个集群的名称不能重复。

3.2 节点 (node)

一个节点是集群中的一个服务器,用来存储数据并参与集群的索引和搜索。和集群类似,节点也有唯一的名字,默认情况下是在启动时分配的随机通用唯一标识符(UUID)。一个节点可以被添加到指定名称的集群中。默认情况下,每个节点会被设置加入到名称为elasticsearch的集群中,这意味着,如果在在网络中启动了某些节点(假设这些节点可以发现彼此),它们会自动形成并加入名称为elasticsearch的集群中。一个集群可以拥有任意多的节点。此外,如果在网络中没有运行任何Elasticsearch节点,此时启动一个节点会创建一个名称为easticsearch的单节点集群。

3.3 索引(index)

索引是具有相似数据结构的文档集合(相当于关系型数据库中的数据库)。

3.4 类型(type)

在索引中,可以定义一个或者多个类型,类型通常是索引的一个逻辑分区(相当于关系型数据库中的一张表)。在最新的Elasticsearch版本中,已经不在支持一个索引下面创建多个类型,并且类型概念在后续版本中已经删除,详见Elasticsearch官方文档;

3.5 文档(document)

文档是索引中可以被找到的基本信息单元(相当于关系型数据库中表中的一行记录数据)。

3.6 分片(shard)

Elasticsearc可以把一个完整的索引分成多个分片,可以将一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索,并且分片数量只能在索引创建前指定,创建后不可以修改。

4、访问方式

Elasticsearch对外提供的API是以http协议的方式,通过JSON格式以REST约定对外提供,在后续的章节中会慢慢的介绍一些访问方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值