搜索引擎简介

基础概念

搜索引擎

索引链+搜索组件,用户给搜索组件提供关键字,然后进行搜索

  • 索引链:
  • 原始内容-获取-创建文档-文档分析-创建索引-索引
  • 搜索组件
  • UI-构建查询-运行查询-读取结果-UI

开源索引链:Lucene,自己不获取内容,不提供前段界面,ElasticSearch 基于 Lucene

Lucene

ElasticSearch:简称 ES

ES 是基于 Lucene 实现的开源、分布式、Restful 的全文本搜索引擎;并且还是一个分布式实时存储文档,其中每个文档的每个 field 均是被索引的数据,且可被搜索;也是一个实时分析功能的分布式搜索引擎,能够扩展至数以百计的节点实时处理 PB 级的数据

组件

  • 基本组件
    • 索引(index) # 文档容器。含有相同属性的文档集合,索引名必须使用小写字母
    • 类型(type) # 索引内部的逻辑分区。一个索引内部可以定义一个或多个类型,文档必须属于一个类型
    • 文档(document) # 文档是 Lucene 索引和搜索的原子单位,它包含一个或多个域,是域的容器:基于 JSON 格式表示,每个域的组成部分(一个名字,一个或多个值,拥有多个值得域通常称为多值域)。可以被索引的基础数据单位
    • 映射(mapping) # 原始内容存储为文档之前需要事先进行分析,如切词、过滤掉某些词等;映射就是用于定义此分析机制该如何实现;此外,ES 为映射提供了诸如将域中的内容排序等功能
  • 集群组件
    • Cluster # ES 的集群标识为集群名称:默认为“elasticsearch”,各个节点就是靠此名字来决定加入到哪个集群中。一个节点只能属于一个集群
    • Node # 运行了单个 ES 实例的主机即为节点,用于存储数据、参与集群索引及搜索操作。节点的标识靠节点名
    • shard # 分片,每个索引都会切割为多个分片,每一个 shard 都是一个完整且独立的索引,可以理解为分词,把一段文字分成多个单词。shard 有两种类型
    • primary shard # 主 shard,ES 默认可为其将其分割为 5 个主 shard,用户也可自定义。
    • replica shard # 备份 shard,每个主 shard 的备份,用户数据冗余以及查询时的负载均衡,shard 的备份数量可以自定义
  • 数据获取组件:
    • solr,nutch,grub,Apeture 等,

基本组件的形象比喻:

  • 百货大楼里有各式各样的商品,例如书籍、笔、水果等。书籍可以根据内容划分成不同种类,如科技类、教育类、悬疑推理等。悬疑推理类的小说中比较有名气的有《福尔摩斯探案集》、《白夜行》等。
  • 百货大楼 –> ElasticSearch 数据库
  • 书籍 –> 索引
  • 悬疑推理 –> 类型
  • 白夜行 –> 文档

ES 的工作过程

  • 启动时,通过多播(默认)或单播方式在 9300/tcp 查找同一集群中的其它节点,并与之建立通信;建立后,通过集群名称来进行判定
  • 集群不用单独部署管理节点,所有节点会选举出一个主节点负责管理一整个集群状态,以及在集群范围内决定各 shards 的分布方式;从用户角度看,每个节点均可接收并响应用户的各类请求。
  • 集群有三种状态,green、red、yellow,当状态不可用时会自动启动修复模式