可能是因为lucene的成熟,高性能,可扩展以及强大的功能,得到创始人的青睐,lucene有很多扩展功能,如 多语言处理,拼写检查,高亮显示等
文档(document),字段(field),词项(term),词条(token)
lucene将写入索引的所有信息组成一种名为倒排索引的结构,倒排索引是面向词项而不是面向文档,实际的lucene创建的索引更为复杂,也更先进,因为索引中还储存和很多其他信息,如词向量(为单个字段创建的小索引,储存改字段中所有的词条) 各字段的原始信息,文档删除标记
每个段只会被创建一次但是会被查询多次,索引期间,段经创建就不会被修改,例如,文档被删除以后,删除信息被单独的保存在一个文件中,而段本身并没有修改
多个段合并在一起,要么是强制执行,要么是有lucene的内在机制决定在某个时刻执行,段合并非常消耗I/O,且合并期间有些不再使用的信息也将被清理掉,例如:被删除的文档,不要强制执行段合并,只需要配置段合并策略,剩余的事情Lucene会自行搞定
这个转换的过程称为分析(analysis),分析由分析器来执行,分析器由分词器(tokenizer)过滤器(filter)和字符映射器组成(character mapper),分词器用来切割词条,过滤器可以移除,修改词条流中的词条,甚至可以创造新的词条,字符映射器用于调用分词器之前的预处理操作,比如HTML文本去标签
elasticsearch是一个可用于构建搜索应用的成品软件,区别去lucene这种中间件
es将数据储存在一个或多个索引中,就像是sql领域的数据库,es索引可能由一个或多个lucene索引构成,具体细节由es的索引分片,复制机制及其配置决定
是es时间中的主要实体,文档之间可能由各自不同的字段集合,且文档并没有固定的模式或强制的结构,这些规则也适用于lucene文档,事实上,es的文档最后都储存为lucene文档了
es每个文档都有与之对应的类型(type)定义,这允许用户在一个索引中存储多种文档类型,并为不同文档类型提供不同的映射
单个es服务器实例称为节点
多个节点来协同处理
es将数据散步到多个物理lucene索引上,这些索引称为分片,而散步分片的过程叫做分片处理(sharding),es会自动完成分片处理,并且让这些分片呈现出一个大索引的样子
为每个分片创建冗余的副本,处理查询时可以把这些副本用作最初的主分片
合理的默认配置,默认的分布式工作模式,对等架构可以避免单点故障,易于向集群扩充节点
使用广播技术来发现同一个集群中的其他节点并与他们链接,集群中会有一个节点被选为管理节点,该节点复制集群的状态管理以及在集群拓扑变化时做出反应,分发索引分片到集群的相应节点上
对每一个丢失的主分片,一个新的主分片将会从原来的主分片的副本中脱颖而出,新分片和副本的放置策略是可配置的,用户可以根据具体需求进行配置
索引操作只会发生在主分片上,当把一个索引请求发送至某节点时,如果该节点没有对应的主分片或者只有副本,那么这个请求会被转发到拥有正确的主分片的节点
查询并不是一个简答的,单步骤的操作,一般来说,查询分为两个阶段,分散阶段和合并阶段
注:(内容整理自:《深入理解Elasticsearch》)