1、逻辑设计
索引-类型-ID的组合唯一确定了ES中的某篇文档
![](https://img.haomeiwen.com/i9002551/fe7ec79ab559e69d.png)
文档
- 最小的索引单位是文档
- 同时包含字段和字段的取值
- 可以是层次型的
- 不依赖预先定义的模式
- ES中的文档是无模式的,并非所有文档都需要有相同的字段
类型
- 类型是文档的逻辑容器,类似表格
- 每个类型中字段的定义称为映射,如name字段映射为string,geolocation字段映射为geo_point
- 最安全的方式是索引数据之前,定义好需要的映射
索引
- 类似于数据库,是独立的大量文档集合
- 每个索引有refresh_interval,根据设置的间隔进行刷新,不会更新一个文档就刷新一次
2、物理设计
一个节点是一个运行的ES进程,一份主分片是一块索引,一个索引通常由5个主分片组成
节点
一个节点是一个ES的实例
- 通过hash选择索引的一个分片,发送到后会进行备份
- 搜索的时候也是随机在节点上访问,节点之间是透明的
![](https://img.haomeiwen.com/i9002551/e81ddfdfa62bea6c.png)
分片
一份分片是Lucene索引,一个包含倒排索引的文件目录;ES索引由多个Lucene索引构成
![](https://img.haomeiwen.com/i9002551/d905684bba695753.png)
集群中分发分片
- 随着越来越多的节点添加,现有分片将在所有节点中进行负载均衡。
分布式索引和搜索
索引已经在前面提到过,hash来选分片
搜索使用round-robin轮训机制选择可用分片,并将搜索请求转发过去
3、索引新数据
通过cURL索引
% curl -XPUT 'localhost:9200/get-together/group/1?pretty' -d '{
"name":"ES Denver",
"organizer":"Lee"
}'
创建索引和映射类型
- 获取映射,访问_mapping端点
curl 'localhost:9200/get-together/_mapping/group?pretty'
![](https://img.haomeiwen.com/i9002551/6e18bde20d9b1589.png)
4、搜索数据
- 通过_search端点进行搜索
% curl "localhost:9200/get-together/group/_search?q=sample&pretty"
回复的内容
![](https://img.haomeiwen.com/i9002551/578c60b3305c7806.png)
- took 消耗的时间,单位是毫秒
- shards 返回的是分片信息
- hits展示了每个匹配文档的索引、类型、ID、得分、_source信息
搜索
curl 'localhost:9200/get-together/group/_search?pretty' -d '{
"query": {
"query_string":{
"query":"",
"default_field":"name",
"default_operator":"AND"
}
}
}'
curl 'localhost:9200/get-together/group/_search?pretty' -d '{
"query": {
"term":{
"name":""
}
}
}'
// 不会返回得分
curl 'localhost:9200/get-together/group/_search?pretty' -d '{
"query": {
"filtered":{
"filter":{
"term":{
"name":"elasticsearch"
}
}
}
}
}'
5、配置ES
elasticsearch.yml中指定集群名称
- config/ 中存储ES的主要配置文件
logging.yml指定详细日志记录
- cluster-name.log 主要日志
- cluster-name_index_indexing_slowlog.log 慢搜索日志
- cluster-name_index_indexing-slowlog.log 慢索引日志
调整JVM设置
- ES在一个JVM中运行
- ES使用的大部分内存称为堆,默认分配256MB初识内存,最多扩展至1GB
- export ES_HEAP_SIZE=500m; bin/elsasticsearch 可以调整
网友评论