cluster
代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。
shards
代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
replicas
代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
recovery
代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
river
代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的,river这个功能将会在后面的文件中重点说到。
gateway
代表es索引的持久化存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到硬盘。当这个es集群关闭再重新启动时就会从gateway中读取索引数据。es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。
discovery.zen
代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。
Transport
代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。
基本命令:
监控和查看集群状态
查看集群的健康状态
http://127.0.0.1:9200/_cat/health?v
查看集群的索引数
http://127.0.0.1:9200/_cat/indices?v
查看集群所在磁盘的分配状况
http://127.0.0.1:9200/_cat/allocation?v
查看集群的节点
http://127.0.0.1:9200/_cat/nodes?v
查看集群的其它信息
http://127.0.0.1:9200/_cat/
创建索引
Method:PUT http://192.168.237.130:9200/people { "settings":{ "number_of_shards": 3, "number_of_replicas": 1 }, "mappings":{ "man":{ "properties":{ "name": { "type":"text" }, "country": { "type":"keyword" }, "age":{ "type":"integer" }, "date":{ "type":"date", "format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" } } } } }
http://192.168.237.130:9200/people/man/1 { "name":"wei", "country":"china", "age":28, "data":"1293-12-33" }
自动ID插入
Method:POST http://192.168.237.130:9200/people/man/ { "name":"wei2", "country":"china", "age":23, "data":"1293-12-23" }
修改文档
直接修改文档
Method:POST http://192.168.237.130:9200/people/man/1/_update { "doc":{ "name":"who am I" } }
通过脚本修改文档
{ "script":{ "lang":"painless", "inline": "ctx._source.age = params.age", "params": { "age":100 } } }
删除文档
Method:DELETE http://192.168.237.130:9200/people/man/1
删除索引
Method:DELETE http://192.168.237.130:9200/people
查询
简单查询
Method:GET http://192.168.237.130:9200/book/novel/1
条件查询
Method http://192.168.237.130:9200/book/_search
查询全部
{ "query":{ "match_all":{} }, "from":1, "size":1 }
from 表示从结果中的第几条开始取数据,size表示取多少条
根据条件查询
{ "query":{ "match":{ "title":"ES" } }, "sort":[ { "publish_date":{"order":"desc"}} ] }
聚合查询
{ "aggs":{ "group_by_word_count":{ "terms":{ "field":"word_count" } }, "group_by_publish_date":{ "terms":{ "field":"publish_date" } } } }
子条件查询:Query Context
在查询过程中,除了判断文档是否满足查询条件,ES还会计算一个_score来标志匹配的程度,旨在判断目标文档和查询条件匹配有多好
- 全文本查询:针对文本类型数据
模糊匹配:
{ "query":{ "match":{ "author":"李四" } } }
完全匹配
{ "query":{ "match_phrase":{ "author":"李四" } } }
多个字段匹配查询
{ "query":{ "multi_match":{ "query":"李四", "fields":["author","title"] } } }
query_string 查询
{ "query":{ "query_string":{ "query":"李四 AND ES" } } }
- 字段级别查询:针对结构化数据,如数字,日期等
字段查询
{ "query":{ "term":{ "word_count":1000 } } }
范围查询
{ "query":{ "range":{ "word_count":{ "gte":1000, "lte":2000 } } } }
子条件查询:Filter Context
在查询过程中,只判断该文件是否满足条件,只有Yes或者No
{ "query":{ "bool":{ "filter":{ "term":{ "word_count":1000 } } } } }
符合条件查询
固定分数查询
{ "query":{ "constant_score":{ "filter":{ "match":{ "title":"ES" } }, "boost":2 } } }
布尔查询
should是或逻辑,must是与逻辑 "query":{ "bool":{ "should":[ { "match":{ "author":"李四" } }, { "match":{ "title":"ES" } } ] } } }
手动段合并
POST /indexName/_optimize?max_num_segments=1