首先很想说,很高兴有位同济的大学研究生同学,让我可以在毕业5个月后,还能再次走进图书馆去借自己想看的书籍,比如最近因为工作需要而接触的elasticsearch。
传入的文档中的数据怎么转化为倒排索引,查询文本怎样变成可搜索的词---->这个数据转化的过程就是分析.
由于其分布性性质和实时功能,许多人把他称为文档数据库。
Elaseticsearch把数据存在一个或多个索引上,每个索引包含各种类型的文档,我们也知道每个文档有很多字段,映射定义了Elasticsearch如何对待这些字段。
分片:当有大量的文档时,由于内存的限制,硬盘能力,处理能力不足,无法足够响应客户端请求等,一个节点可能不够,在这中情况下,数据可以分为较小的分片(shard)的部分,(其中每个分片都是一个独立的Apache Lucence)。每个分片可以放在不同的服务器上,因此,数据可以在集群中的节点中传播。查询时会把结果合并在一起显示。
Elasticsearch使用文档的唯一标识符来计算文档应该被放到哪个分片中,索引请求到一个节点后,该节点会转发文档到持有相关分片的目标节点中。尝试用文档标识符来获取文档时,发送查询到一个节点。。。
elasticsearch索引是由一个或多个分片组成的,每个分片包含了文档集的一部分。而这些分片也可以有副本,他们是分片的完整副本。在创建索引的过程中,可以规定应创建分片的分片及副本的数量。默认配置是5个分片和一个副本。这也意味着操作结束时,将有10个lucence索引分布在集群中。------每个分片都有自己的分片副本。
字段类型及其公共属性参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html
http://www.cnblogs.com/xing901022/p/5471419.html
Elasticsearch索引的每个文档都有自己的标识符和类型,在ES中,文档存在两种内部标识符。
- _uid:是索引中文档的唯一标识符,由文档的标识符和类型构成,此字段不需要设置,总是被索引。
- _id:实际标识符,一般创建文档是时候会传入,如果不传入会自动生成一个。
curl -XPUT http://localhost:9200/{index}/{type}/_mapping -data-binnary @document.json
这里用--data-binary,没有用-d,因为-d 参数忽略换行符,而换行符在es的批量请求中很重要,也就是说此参数可以保留换行符。
index: es里的index相当于一个数据库。
type: 相当于数据库里的一个表。
id: 唯一,相当于主键。
node:节点是es实例,一台机器可以运行多个实例,但是同一台机器上的实例在配置文件中要确保http和tcp端口不同(下面有讲)。
cluster:代表一个集群,集群中有多个节点,其中有一个会被选为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。
shards:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
replicas:代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
ES各种节点的分工:
客户端节点
当主节点和数据节点配置都设置为false的时候,该节点只能处理路由请求,处理搜索,分发索引操作等,从本质上来说该客户节点表现为智能负载平衡器。
独立的客户端节点在一个比较大的集群中是非常有用的,他协调主节点和数据节点,客户端节点加入集群可以得到集群的状态,根据集群的状态可以直接路由请求。
数据节点
数据节点主要是存储索引数据的节点,主要对文档进行增删改查操作,聚合操作等。数据节点对cpu,内存,io要求较高,
在优化的时候需要监控数据节点的状态,当资源不够的时候,需要在集群中添加新的节点。
主资格节点说明
主资格节点的主要职责是和集群操作相关的内容,如创建或删除索引,跟踪哪些节点是群集的一部分,并决定哪些分片分配给相关的节点。
稳定的主节点对集群的健康是非常重要的。默认情况下任何一个集群中的节点都有可能被选为主节点。
索引数据和搜索查询等操作会占用大量的cpu,内存,io资源,为了确保一个集群的稳定,分离主节点和数据节点是一个比较好的选择。
健康状态:
安装了head插件之后,可以在web上看到集群健康状态,集群处于绿色表示当前一切正常,集群处于黄色表示当前有些副本不正常,集群处于红色表示部分数据无法正常提供。绿色和黄色状态下,集群都是能提供完整数据的,红色状态下集群提供的数据是有缺失的。