Elasticsearch,简称ES。它是建立在全文搜索引擎库Apache Lucene基础之上的一个开源的搜索引擎,也可以作为NoSQL数据库,存储任意格式的文档和数据。也可以做大数据的分析,是一个跨界开源产品。
它最主要的应用场景是ELK的日志分析系统。
另外它还有以下特点:
1. 第一、采用Master-slave架构,实现数据的分片和备份
2. 第二、使用Java编写,并对Lucene进行封装,隐藏了Lucene的复杂性
3. 第三、能胜任上百个服务节点的扩展,并支持PB级别的结构化或者非结构化数据
4. 第四、ES提供的Restful API,不仅简化了ES的操作,还支持任何语言的客户端提供API接口,另外Restful API的风格还实现了CURD操作、创建索引,删除索引等功能。
在ES的使用上有一些经验心得,比如:
1. es里面复杂的关联查询尽量别用,一旦用了性能都不太好。最好是先在Java系统里就完成关联,将关联好的数据直接写入ES中。
2. 避免一些太复杂的操作,比如join/nested/parent-child搜索,不然容易出现性能问题。
3. 避免深分页查询,ES集群的分页查询支持from和size参数,查询的时候,每个分片必须构造一个长度为from+size的优先队列,然后回传到网关节点,网关节点再对这些优先队列进行排序找到正确的size文档。当from足够大的时候,就算不发生OOM,也会影响到CPU和带宽等,从而影响到整个集群的性能。