官方文档 -> https://www.elastic.co/guide/cn/index.html download-> https://www.elastic.co/cn/downloads/elasticsearch
Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进,性能最好的,功能最全的搜索引擎库.
Lucene只是一个库,想要发挥其强大的作用,需将其集成到应用中,Lucene非常复杂,需要深入的了解检索相关知识才能理解它是如何工作的.
Elasticsearch是使用Java编写并使用Lucene来建立索引并实现搜索功能,通过简单连贯的RESTful API让全文搜索变得简单并隐藏Lucene的复杂性.
当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:
- 分布式的实时文件存储,每个字段都被索引并可被搜索
- 实时分析的分布式搜索引擎
- 可以扩展到上百台服务器,处理PB级结构化或非结构化数据
Elasticsearch是面向文档型数据库,一条数据就是一个文档.用json作为文档序列化格式.
- 索引(index): 一个索引就是一个拥有几分相似特征的文档的集合(Database);
- 类型(type): 在一个索引中,你可以定义一种或多种类型(Table),在新版8.x后已移除此概念;
- 文档(document): 一个文档是一个可被索引的基础信息单元(Row);
- 字段(field): 相当于是数据表的字段,对文档数据根据不同属性进行的分类标识;
- 映射(mapping): mapping 是处理数据的方式和规则方面做一些限制,如:某个字段的数据类型、默认值、 分析器、是否能被索引...;
- 分片(shards): 一个索引可以存储超出单个节点硬件限制的大量数据,
重要性->允许你水平分割 / 扩展你的内容容量~允许你在分片之上进行分布式的并行的操作,进而提高性能/吞吐量; - 副本(replicas): Elasticsearch 允许创建分片的一份或多份拷贝,这些拷贝叫做复制分片(副本),
重要性->在分片/节点失败的情况下,提供了高可用性,注意复制分片不应该与 原/主要(original/primary)分片置于同一节点上~扩展搜索量/吞吐量,因为搜索可以在所有的副本上并行运行 - 分配(allocation): 将分片分配给某个节点的过程,包括分配主分片或者副本;
- 接近实时(rnt): 接近实时的搜索平台,意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1S);
- 集群(cluster): 由一个或多个节点组织在一起,共同持有整个的数据,并一起提供索引和搜索功能;
- 节点(node): 一个节点是集群中的一个服务器,作为集群的一部分,存储数据,参与集群的索引和搜索功能.
ES 安装配置.
常用配置(../config/elasticsearch.yml)->
- cluster.name: elasticsearch 集群名称,默认:elasticsearch ;
- node.name: hj001 节点名称 ;
- node.master: true 节点是否够格选举为master,默认:true ;
- node.data: true 是否存储数据,默认:true ;
- index.number_of_shards: 5 索引分片个数,默认:5 ;
- index.number_of_replicas: 1 索引副本个数,默认:1 ;
- path.conf: /path/conf 配置文件的存储路径,默认:es根目录下的config文件夹 ;
- path.data:/path/data1,/path/data2 索引数据的存储路径,默认:es根目录下的data文件夹,可设置多个存储路径-用逗号隔开 ;
- path.work:/path/work 临时文件的存储路径,默认:es根目录下的work文件夹 ;
- path.logs: /path/logs 日志文件的存储路径,默认:es根目录下的logs文件夹 ;
- path.plugins: /path/plugins 插件的存放路径,默认:es根目录下的plugins文件夹 ;
- bootstrap.mlockall: true 锁住内存,默认:true ;
- network.bind_host: 192.168.0.1 绑定的ip地址,默认:0.0.0.0 ;
- network.publish_host: 192.168.0.1 其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址 ;
- network.host: 192.168.0.1 这个参数是用来同时设置bind_host和publish_host上面两个参数 ;
- transport.tcp.port: 9300 节点间交互的tcp端口,默认:9300 ;
- transport.tcp.compress: true 是否压缩tcp传输时的数据,默认:false,不压缩 ;
- http.port: 9200 对外服务的http端口,默认:9200 ;
- http.max_content_length: 100mb 内容的最大容量,默认:100mb ;
- http.enabled: true 是否使用http协议对外提供服务,默认:true开启 ;
- gateway.type: local gateway的类型,默认: local即为本地文件系统;
- gateway.recover_after_nodes: 1 集群中N个节点启动时进行数据恢复,默认:1 ;
- gateway.recover_after_time: 5m 初始化数据恢复进程的超时时间,默认:5分钟 ;
- gateway.expected_nodes: 2 集群中节点的数量,默认:2,一旦这N个节点启动,就会立即进行数据恢复 ;
- cluster.routing.allocation.node_initial_primaries_recoveries: 4 初始化数据恢复时,并发恢复线程的个数,默认:4 ;
- cluster.routing.allocation.node_concurrent_recoveries: 4 添加删除节点或负载均衡时并发恢复线程的个数,默认:4 ;
- indices.recovery.max_size_per_sec: 0 数据恢复时限制的带宽,如入100mb,默认为0,即无限制 ;
- indices.recovery.concurrent_streams: 5 设置这个参数来限制从其它分片恢复数据时最大同时打开并发流的个数,默认:5 ;
- discovery.zen.minimum_master_nodes: 1 设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点.默认:1,对于大的集群来说,可以设置大一点的值(2-4) ;
- discovery.zen.ping.timeout: 3s 集群中自动发现其它节点时ping连接超时时间,默认:3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错 ;
- discovery.zen.ping.multicast.enabled: false 是否打开多播发现节点,默认:true ;
- discovery.zen.ping.unicast.hosts: [“host1”, “host2:port”, “host3 [portX-portY] “] 集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点 ;
ES是通过restful API风格进行调用,java api中有进行一层封装,springdata也有集成~
倒排索引: Elasticsearch 使用一种称为 倒排索引 的结构,它适用于快速的全文搜索.一个倒排索引由文档中所有不重复词的列表构成,
对于其中每个词,有一个包含它的文档列表,单词文档矩阵.
分布式集群~故障转移~应对故障~路由计算~分片控制~写流程~读流程~更新流程~多文档操作流程...
分析器~分词器~持久化~文档搜索分析,并发下的读写一致保证.......待持续深入..