互联网搜索核心组件:Lucene 20 岁生日啦

前言

你用过Elasticsearch么?那你知道Elasticsearch底层是基于什么技术演化而来的么?相信用过ES并深刻了解过ES的都知道,ES是基于Lucene,隐藏复杂性,提供简单易用的restful api接口、java api接口、其余语言的接口。如今Lucene从诞生到如今已经20年了,Happy Birthday , Lucene!ES官网还特地为Lucene庆生,连接:https://www.elastic.co/cn/cel...html

ES做者基于Lucene的传说

关于elasticsearch的一个传说,有一个程序员失业了,陪着本身老婆去英国伦敦学习厨师课程。程序员在失业期间想给老婆写一个菜谱搜索引擎,以为lucene实在太复杂了,就开发了一个封装了lucene的开源项目,compass。后来程序员找到了工做,是作分布式的高性能项目的,以为compass不够,就写了elasticsearch,让lucene变成分布式的系统。 今天咱们乘着Lucene的20岁生日一块儿温习一下Lucene和ES的核心概念。java

Lucene 的核心概念

  1. IndexWriter

lucene中最重要的的类之一,它主要是用来将文档加入索引,同时控制索引过程当中的一些参数使用。程序员

  1. Analyzer

分析器,主要用于分析搜索引擎遇到的各类文本。经常使用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。数据库

  1. Directory

索引存放的位置;lucene提供了两种索引存放的位置,一种是磁盘,一种是内存。通常状况将索引放在磁盘上;相应地lucene提供了FSDirectory和RAMDirectory两个类。api

  1. Document

文档;Document至关于一个要进行索引的单元,任何能够想要被索引的文件都必须转化为Document对象才能进行索引。服务器

  1. Field

相似于数据库中的一个字段,存储了key-value值。restful

  1. IndexSearcher

是lucene中最基本的检索工具,全部的检索都会用到IndexSearcher工具;数据结构

  1. Query

Query相似关系型数据库中的SQL语句。与关系型数据库相似,Lucene提供了如下的基本查询:精确查询xxx = ? TermQuery、范围查询 xxx BETWEEN? AND ? PointRangeQuery、模糊查询 xxx LIKE ‘%?%’ PrefixQuery、RegexpQuery、组合查询 (…) AND (…) OR (…) BooleanQueryapp

  1. QueryParser

是一个解析用户输入的工具,能够经过扫描用户输入的字符串,生成Query对象。运维

  1. Hits

在搜索完成以后,须要把搜索结果返回并显示给用户,只有这样才算是完成搜索的目的。在Lucene中,搜索的结果的集合是用Hits类的实例来表示的。

ES 的核心概念

  1. Near Realtime(NRT):近实时,两个意思,从写入数据到数据能够被搜索到有一个小延迟(大概1秒);基于es执行搜索和分析能够达到秒级
  2. Cluster:集群,包含多个节点,每一个节点属于哪一个集群是经过一个配置(集群名称,默认是elasticsearch)来决定的,对于中小型应用来讲,刚开始一个集群就一个节点很正常。
  3. Node:节点,集群中的一个节点,节点也有一个名称(默认是随机分配的),节点名称很重要(在执行运维管理操做的时候),默认节点会去加入一个名称为“elasticsearch”的集群,若是直接启动一堆节点,那么它们会自动组成一个elasticsearch集群,固然一个节点也能够组成一个elasticsearch集群
  4. Document&field:文档,es中的最小数据单元,一个document能够是一条客户数据,一条商品分类数据,一条订单数据,一般用JSON数据结构表示,每一个index下的type中,均可以去存储多个document。一个document里面有多个field,每一个field就是一个数据字段。
  5. Index:索引,包含一堆有类似结构的文档数据,好比能够有一个客户索引,商品分类索引,订单索引,索引有一个名称。一个index包含不少document,一个index就表明了一类相似的或者相同的document。好比说创建一个product index,商品索引,里面可能就存放了全部的商品数据,全部的商品document。
  6. Type:ES 7.x 版本已经废除Type,关于为何取消,能够参考 :

https://www.elastic.co/guide/...
类型,每一个索引里均可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document,都有相同的field,好比博客系统,有一个索引,能够定义用户数据type,博客数据type,评论数据type。

  1. shard:单台机器没法存储大量数据,es能够将一个索引中的数据切分为多个shard,分布在多台服务器上存储。有了shard就能够横向扩展,存储更多数据,让搜索和分析等操做分布到多台服务器上去执行,提高吞吐量和性能。每一个shard都是一个lucene index。
  2. replica:任何一个服务器随时可能故障或宕机,此时shard可能就会丢失,所以能够为每一个shard建立多个replica副本。replica能够在shard故障时提供备用服务,保证数据不丢失,多个replica还能够提高搜索操做的吞吐量和性能。primary shard(创建索引时一次设置,不能修改,默认5个),replica shard(随时修改数量,默认1个),默认每一个索引10个shard,5个primary shard,5个replica shard,最小的高可用配置,是2台服务器。

本文由博客一文多发平台 OpenWrite 发布!
相关文章
相关标签/搜索