ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
ElasticSearch的底层是Lucene,Lucene通过倒排索引的方式来实现全文搜索功能。
想要实现全文索引,数据库需要在一个字段索引多个值。而传统的关系型数据库,只能是每个字段对应单个值的形式。不能够满足单字段索引单个值的需求。而倒排索引则能满足,倒排索引的每一个字段所对应的值——包含的文档,都是等同于该字段的或者包含该字段的。
倒排索引在这个包含的基础上做了拓展,它包含了,包含了该字段的文档数、字段在文档中所出现的次数、每个文档中出现的字段顺序、文档的长度、所有的文档的平均长度。这些统计数据,可以让ElasticSearch确定哪些文档与字段的关联性较大。哪些字段更加有“价值”。
不变性:
- 安全,不需要锁。在从未需要更新索引的情况,不必担心多个线程试图同时进行更改。
- 一旦索引被读取到内存中,就会一直存在。如果设备的内存足够大,大多数读取将来自内存,而不是磁盘,将极大地提高性能。
- 其他的缓存在索引的生命周期内,依然存在,不必重新生成。
- 通过编写单个的大型索引可以压缩数据,减少磁盘IO和缓存所需要的RAM(内存)量。