深入浅出熟悉搜索引擎

245 阅读6分钟

1、 Es

ElasticSearch是一个分布式,高性能、高可用、可伸缩、RESTful 风格的搜索和数据分析引擎。通常作为Elastic Stack的核心来使用

1.1、基本概念

ESMySql
字段
文档一行数据
类型(已废弃)
索引数据库

1.2、基本概念详细解释

1.2.1、文档(Document)

我们知道Java是面向对象的,而Elasticsearch是面向文档的,也就是说文档是所有可搜索数据的最小单元。ES的文档就像MySql中的一条记录,只是ES的文档会被序列化成json格式,保存在Elasticsearch中; 这个json对象是由字段组成,字段就相当于Mysql的列,每个字段都有自己的类型(字符串、数值、布尔、二进制、日期范围类型);

当我们创建文档时,如果不指定字段的类型,Elasticsearch会帮我们自动匹配类型;

每个文档都有一个ID,类似MySql的主键,咱们可以自己指定,也可以让Elasticsearch自动生成;

文档的json格式支持数组/嵌套,在一个索引(数据库)或类型(表)里面,你可以存储任意多的文档。

注意:虽然在实际存储上,文档存在于某个索引里,但是文档必须被赋予一个索引下的类型才可以。

1.2.2、类型(Type)

类型就相当于MySql里的表,我们知道MySql里一个库下可以有很多表,最原始的时候ES也是这样,一个索引下可以有很多类型,但是从6.0版本开始,type已经被逐渐废弃,但是这时候一个索引仍然可以设置多个类型,一直到7.0版本开始,一个索引就只能创建一个类型了(_doc)。这一点,大家要注意,网上很多资料都是旧版本的,没有对这点进行说明。

1.2.3、索引(Index)

索引就相当于MySql里的数据库,它是具有某种相似特性的文档集合。反过来说不同特性的文档一般都放在不同的索引里; 索引的名称必须全部是小写; 在单个集群中,可以定义任意多个索引; 索引具有mapping和setting的概念,mapping用来定义文档字段的类型,setting用来定义不同数据的分布。 除了这些常用的概念,我们还需要知道节点概念的作用,因此咱们接着往下看!

1.2.4、节点(node)

一个节点就是一个ES实例,其实本质上就是一个java进程; 节点的名称可以通过配置文件配置,或者在启动的时候使用-E node.name=ropledata指定,默认是随机分配的。建议咱们自己指定,因为节点名称对于管理目的很重要,咱们可以通过节点名称确定网络中的哪些服务器对应于ES集群中的哪些节点; ES的节点类型主要分为如下几种: Master Eligible节点:每个节点启动后,默认就是Master Eligible节点,可以通过设置node.master: false 来禁止。Master Eligible可以参加选主流程,并成为Master节点(当第一个节点启动后,它会将自己选为Master节点);注意:每个节点都保存了集群的状态,只有Master节点才能修改集群的状态信息。 Data节点:可以保存数据的节点。主要负责保存分片数据,利于数据扩展。 Coordinating 节点:负责接收客户端请求,将请求发送到合适的节点,最终把结果汇集到一起 注意:每个节点默认都起到了Coordinating node的职责。一般在开发环境中一个节点可以承担多个角色,但是在生产环境中,还是设置单一的角色比较好,因为有助于提高性能。

1.2.5、分片(shard)

了解分布式或者学过mysql分库分表的应该对分片的概念比较熟悉,ES里面的索引可能存储大量数据,这些数据可能会超出单个节点的硬件限制。

为了解决这个问题,ES提供了将索引细分为多个碎片的功能,这就是分片。这里咱们可以简单去理解,在创建索引时,只需要咱们定义所需的碎片数量就可以了,其实每个分片都可以看作是一个完全功能性和独立的索引,可以托管在集群中的任何节点上。

疑问二:分片有什么好处和注意事项呢?

通过分片技术,咱们可以水平拆分数据量,同时它还支持跨碎片(可能在多个节点上)分布和并行操作,从而提高性能/吞吐量; ES可以完全自动管理分片的分配和文档的聚合来完成搜索请求,并且对用户完全透明; 主分片数在索引创建时指定,后续只能通过Reindex修改,但是较麻烦,一般不进行修改。

1.2.6、副本分片(replica shard)

熟悉分布式的朋友应该对副本对概念不陌生,为了实现高可用、遇到问题时实现分片的故障转移机制,ElasticSearch允许将索引分片的一个或多个复制成所谓的副本分片。 疑问三:副本分片有什么作用和注意事项呢? 当分片或者节点发生故障时提供高可用性。因此,需要注意的是,副本分片永远不会分配到复制它的原始或主分片所在的节点上; 可以提高扩展搜索量和吞吐量,因为ES允许在所有副本上并行执行搜索; 默认情况下,ES中的每个索引都分配5个主分片,并为每个主分片分配1个副本分片。主分片在创建索引时指定,不能修改,副本分片可以修改。

看到这里,各位一定对ES有所了解了,那么接下来就是安装配置并使用了!有不少朋友初学时查阅资料,选择安装win版本,这里我不推荐,因为实际工作中,ES不可能安装在win下。但是根据官方文档安装Linux版本时,又会遇到各种奇葩问题,咋办呢?别急,我这里有一本极速安装方法,百分百不出错,咱们接着往下看! 链接:blog.csdn.net/qq_26803795…

2、Sorl搜索引擎

2.1、Sorl的基本概念

Apache Solr是一个功能强大的搜索服务器,它支持REST风格API。Solr是基于Lucene的,Lucene 支持强大的匹配能力,如短语,通配符,连接,分组和更多不同的数据类型。它使用 Apache Zookeeper特别针对高流量进行优化。Apache Solr提供各式各样的功能,我们列出了部分最主要的功能。

先进的全文搜索功能。 XML,JSON和HTTP - 基于开放接口标准。 高度可扩展和容错。 同时支持模式和无模式配置。 分页搜索和过滤。 支持像英语,德语,中国,日本,法国和许多主要语言 丰富的文档分析。

3、Lucene

3.1、Lucene的基本概念

Lucene是一套用于全文检索和搜寻的开源程序库,由Apache软件基金会支持和提供 Lucene提供了一个简单却强大的应用程序接口(API),能够做全文索引和搜寻,在Java开发环境里Lucene是一个成熟的免费开放源代码工具 Lucene并不是现成的搜索引擎产品,但可以用来制作搜索引擎产品