ElasticSearch基础(4)-索引
一、ES API常用规则
ES支持以Http协议的方式提供REST服务,以JSON格式发送请求返回响应。
ES提供了大量的不管的数据操作,运维管理API,大量的api
这海量的api有一些通用的功能特性。比如pretty格式化输出等等。
1.1 多索引参数
1. 支持多索引查询,就是同时可以查询多个索引中的数据,例如,参数test1,test2,test3,表示同时搜索test1,test2,test3三个索引中中的数据,或者用(_all全部索引)。
2. 支持通配符的操作,例如test*,表示查询所有以test开头的索引。同时也支持排除操作,例如+test*,-test3表示查询所有test开头的索引,排除test3。
3. 多索引查询还支持以下参数:
ignore_unavailable:当索引不存在或者关闭的时候,是否忽略这些索引,值为true和false。
allow_no_indices:当使用通配符查询时,当有索引不存在的时候是否返回查询失败。
expand_wildcards :控制什么类型的索引被支持,值为open,close,none,all,open表示只支持open类型的索引,close表示只支持关闭状态的索引,none表示不可用,all表示同时支持open和close索引。注意:文档操作API和索引别名API不支持多索引参数。
1.2 通用参数
例如pretty,human,format=yaml,flatt_setting=true等等
看语义自然知道其用法...不过注意,可能在客户端做实验的时候各种字符需要转义。
1.3 filter_path
可以通过filter_path来对返回内容进行过滤
curl -XGET 'http://localhost:9200/bank/account/_search?pretty&filter_path=took,hits.hits._id' -d '{
"query" : {"match_all" : {}}
}'
支持通配符*匹配字段名称,例如:
curl -XGET 'http://localhost:9200/bank/account/_search?pretty\&filter_path=took,hits.h*._id' -d '{
"query" : {"match_all" : {}}
}'
再举个例子,可以用两个通配符**来匹配不确定名称的字段,例如我们可以返回版本的段信息:
curl -XGET 'http://localhost:9200/_segments?pretty&filter_path=indices.**.version'
可以结合_source字段和filter_path参数,例如:
curl -XGET 'http://localhost:9200/_search?pretty&filter_path=hits.hits._source&_source=source_node'
二、索引常用操作API
2.1 创建及查看索引
1. 创建索引
迄今为止,我们简单的通过添加一个文档的方式创建了一个索引。这个索引使用默认设置,新的属性通过动态映射添加到分类中。现在我们需要对这个过程有更多的控制:我们需要确保索引被创建在适当数量的分片上,在索引数据_之前_设置好分析器和类型映射。
为了达到目标,我们需要手动创建索引,在请求中加入所有设置和类型映射,如下所示:
PUT /my_index
{
"settings": { ... any settings ... },
"mappings": {
"type_one": { ... any mappings ... },
"type_two": { ... any mappings ... },
...
}
事实上,你可以通过在 config/elasticsearch.yml
中添加下面的配置来防止自动创建索引。
action.auto_create_index: false
NOTE
今后,我们将介绍怎样用【索引模板】来自动预先配置索引。这在索引日志数据时尤其有效: 你将日志数据索引在一个以日期结尾的索引上,第二天,一个新的配置好的索引会自动创建好。
下面是一个简单的例子:
curl -XPOST 'http://localhost:9200/mytest3' -d '
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
},
"mappings": {
"type1": {
"properties": {
"field1": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
'
2. 查看索引
curl -XGET 'http://localhost:9200/mytest3?pretty'
还可以加入过滤,支持:_settings,_mappings _warmers, _aliases ,如:
curl -XGET 'http://localhost:9200/mytest3/_settings,_mappings?pretty'
3. 检查索引是否存在
curl -XHEAD -i 'http://localhost:9200/mytest3'
4. 打开和关闭索引
curl -XPOST 'http://localhost:9200/mytest/_close'
curl -XPOST 'http://localhost:9200/mytest/_open'
5. 删除索引
使用以下的请求来删除索引:
DELETE /my_index
你也可以用下面的方式删除多个索引
DELETE /index_one,index_two
DELETE /index_*
你甚至可以删除所有索引
DELETE /_all
2.2 Put Mapping API
先创建一个官网上的索引
curl -XPUT 'http://localhost:9200/twitter?pretty' -d '{
"mappings": {
"tweet": {
"properties":{
"message":{
"type": "string"
}
} }
}
}
'
如何给已经存在的索引增加类型
curl -XPUT 'http://localhost:9200/twitter/_mapping/user?pretty' -d '{
"properties":{
"name":{"type": "string"}
}
}
'
如何给已经存在的索引类型增加字段
curl -XPUT 'http://localhost:9200/twitter/_mapping/tweet?pretty' -d '{
"properties":{
"username":{"type":"string"}
}
}
'
2.3 mapping API
获取mapping
curl -XGET 'http://localhost:9200/_mapping/tweet?pretty'
curl -XGET 'http://localhost:9200/_all/_mapping/tweet,account?pretty'
curl -XGET 'http://localhost:9200/_all/_mapping?pretty'
curl -XGET 'http://localhost:9200/_mapping?pretty'
获取字段的mapping
curl -XGET 'http://localhost:9200/twitter/_mapping/tweet/field/username'
curl -XGET 'http://localhost:9200/twitter,bank/_mapping/field/message'
curl -XGET 'http://localhost:9200/_all/_mapping/tweet,book/field/message,user.id'
curl -XGET 'http://localhost:9200/_all/_mapping/tw*/field/*.id'
curl -XGET 'http://localhost:9200/_all/_mapping/*/field/*?pretty'
检测类型是否存在
curl -XHEAD -i 'http://localhost:9200/bank/account?pretty'
2.4 修改操作
更新索引replicas数量
索引的主shards数目在创建索引之后不能改变,但是replicas数目支持修改
curl -XPUT http://localhost:/mytest/_settings -d '
{
"index" : {
"number_of_replicas" : 4
}
}
修改索引Analyzer
#. 先要关闭索引
curl -XPOST 'http://localhost:9200/mytest/_close'
# . 修改
curl -XPUT 'http://localhost:9200/mytest/_settings' -d '{
"analysis" : {
"analyzer":{
"content":{
"type":"custom",
"tokenizer":"whitespace"
}
}
}
}'
# . 打开索引
curl -XPOST 'http://localhost:9200/mytest/_open'
2.5 其他操作
获取设置信息
curl -XGET 'http://localhost:9200/twitter/_settings'
curl -XGET 'http://localhost:9200/twitter,kimchy/_settings'
curl -XGET 'http://localhost:9200/_all/_settings'
curl -XGET 'http://localhost:9200/2016-*/_settings'
查看分词器分词效果
curl -XGET http://localhost:/_analyze?pretty -d '
{
"analyzer" : "standard",
"text" : "this is a macbook pro"
}'
你可以通过api查看使用某种es现有的analyzer分词效果
如果你安装了ik,可以试试ik
text支持使用数组
而且可以设置为更为精细的级别,例如:
analyzer" : "standard",
"tokenizer" : "keyword",
"token_filter" : ["lowercase"],
"char_filter" : ["html_strip"],
三、索引维护API
es还提供了大量的统计api和运维api,以方便进行索引的运维工作
查看索引统计信息
curl 'http://localhost:9200/_stats?pretty'
curl 'http://localhost:9200/bank/_stats?pretty'
索引Segment
提供了低级的Lucene中索引段信息
curl -XGET 'http://localhost:9200/bank/_segments?pretty'
curl -XGET 'http://localhost:9200/mytest,mytest2/_segments'
curl -XGET 'http://localhost:9200/_segments'
如果要想查看更详细的信息,可以在url上添加?verbose=true
索引Recovery
提供索引的shard recovery恢复信息
curl -XGET 'http://localhost:9200/mytest,mytest2/_recovery?pretty'
curl -XGET 'http://localhost:9200/_recovery?pretty&human'
还可以添加detailed=true的参数,来查看更详细的信息
索引Shard Store
提供查看索引分片的存储信息,例如:
curl -XGET 'http://localhost:9200/mytest/_shard_stores?pretty'
curl -XGET 'http://localhost:9200/mytest,test2/_shard_stores'
curl -XGET 'http://localhost:9200/_shard_stores'
清除索引缓存
ES内部使用了大量缓存机制以提高查询速度,用来清除1到多个索引相关的缓存,例如:
curl -XPOST 'http://localhost:9200/mytest/_cache/clear?pretty'
curl -XPOST 'http://localhost:9200/mytest,mytest2/_cache/clear'
curl -XPOST 'http://localhost:9200/_cache/clear'
Flush
跟所有的flush功能一样,内存flush到磁盘上去,功能是把索引在内存里面的数据,存储到具体的存储器上,并删除相应的内部事务日志。
curl -XPOST 'http://localhost:9200/mytest/_flush?pretty'
curl -XPOST 'http://localhost:9200/mytest,mytest2/_flush'
还支持以下参数
- wait_if_ongoing:缺省是false,如果设置为true,将会阻塞并等待其它正在执行flush的功能执行完成,然后再执行。
- force:是否有必要强制执行,即使没有改变也要flush。
- synced: 同步flush
Refresh
刷新索引,使得上次refresh后的操作引起的变化,都能够反映到查询上。例如:
curl -XPOST 'http://localhost:9200/mytest/_refresh?pretty'
curl -XPOST 'http://localhost:9200/mytest,mytest2/_refresh'
curl -XPOST 'http://localhost:9200/_refresh'
Force Merge
提供强制让索引里面的lucene段进行合并的功能,例如:
curl -XPOST 'http://localhost:9200/mytest/_forcemerge?pretty'
curl -XPOST 'http://localhost:9200/mytest,mytest2/_forcemerge'
curl -XPOST 'http://localhost:9200/_forcemerge'
可以设置的参数有:
(1)max_num_segments:合并段的最大数量
(2)only_expunge_deletes:是否在合并的时候,抹去已经删除的段
(3)flush:执行合并后是否执行flush,默认是true
四、索引相关配置
内存控制器
indices.breaker.total.limit: 总的内存使用大小,默认为JVM堆内存大小的70%。
field数据内存大小
列数据内存大小是指,在ES系统中,系统会估计有多少数据被加载到内存中,如果估计超过这个阀值,它可以通过一个异常来防止该字段的数据加载。
indices.breaker.fielddata.limit:列数据内存大小的限制,默认为JVM堆内存大小的60%。
indices.breaker.fielddata.overhead:所有列估计的内存大小的乘积,默认是1.03.
请求控制器
防止Elasticsearch每个请求的数据结构超过一定的值:
indices.breaker.request.limit:请求控制器的大小,默认为JVM堆内存大小的40%。
indices.breaker.request.overhead:所有请求的乘积,默认为1。
数据缓存
数据缓存主要用于当排序或聚合操作的时候。它将所有的字段值加载到内存中以便提供快速访问文档中的这些值。
indices.fielddata.cache.size:数据缓存的最大值,可以是一个节点的堆内存大小的比例,例如30%,也可以是一个绝对数字,比如12GB。默认是无限制,可以最大的利用内存。这个配置是静态的配置,必须在集群中的每个数据节点上启动前配置好。可以通过curl -XGET
http://localhost:9200/_nodes/stats?pretty请求来监控节点的使用情况。
节点查询缓存
查询缓存是负责缓存查询的结果。每个节点都有一个查询缓存,这个缓存为这个节点下的所有分片服务。这个缓存采用最近最少使用算法; 当缓存满时,把最少使用的数据优先删掉。查询缓存只有使用过滤的时候才会起作用。
indices.queries.cache.size:可以是一个节点的堆内存大小的比例,例如5%,也可以是一个绝对数字,比如 512mb。默认为JVM堆内存大小的10%。
索引缓冲区
索引缓冲区用于存储新的索引文档。当缓冲区满后,缓冲区中的文件被写入磁盘上的一个段,它会在节点的所有分片上分离。它的设置是静态的,并且必须在群集中的每个数据节点上配置。
indices.memory.index_buffer_size:一个节点索引缓冲区的大小,可以是一个节点的堆内存大
小的比例获知是一个绝对数字。默认为JVM堆内存大小的10%。
indices.memory.min_index_buffer_size:可以使用此设置指定最小的索引缓冲区大小。默认为48MB。
indices.memory.max_index_buffer_size:可以使用此设置指定最大的索引缓冲区大小。默认为无限制。
indices.memory.min_shard_index_buffer_size:分配给每个分片索引缓冲区的内存最小值,默认4MB。
分片请求缓存
当一个搜索请求是对一个索引或者多个索引的时候,每一个分片都是进行它自己内容的搜索然后把结果返回到协调节点,然后把这些结果合并到一起统一对外提供。分片缓存模块缓存了这个分片的搜索结果。这使得搜索频率高的请求会立即返回。
注意:请求缓存只缓存查询条件 size=0的搜索,缓存的内容有hits.total, aggregations,
suggestions,不缓存原始的hits。通过now查询的结果将不缓存。
缓存说明
只有在分片的数据实际上发生了变化的时候刷新分片缓存才会失效。刷新的时间间隔越长,缓存的数据越多,当缓存不够的时候,最少使用的数据将被删除。缓存过期可以手工设置,例如:
localhost:/kimchy,elasticsearch/_cache/clear?request_cache=true默认情况下缓存未启用,但在创建新的索引时可启用,例如:
PUT localhost:/my_index
{ "settings": { "index.requests.cache.enable": true }}当然也可以通过动态参数配置来进行设置:
PUT localhost:/my_index/_settings -d'
{ "index.requests.cache.enable": true }'每次请求凑可以通过查询字符串参数request_cache可用于启用或禁用每个请求的缓存。例如:
localhost:/my_index/_search?request_cache=true
{ "size": 0,
"aggs": {
"popular_colors": {
"terms": {
"field": "colors"
} } }}1:如果结果是不确定的(例如,它使用一个随机函数或引用当前时间)应该设置request_cache为false禁用请求缓存。
2:数据的缓存是整个JSON,这意味着如果JSON发生了变化 ,如顺序不同,缓存的内容将会不同。
监控缓存使用
可以通过localhost:9200/_stats/request_cache?pretty&human或者
'localhost:9200/_nodes/stats/indices/request_cache?pretty&human来缓存监控,缓存的大小(以字节为单位)。
索引恢复
indices.recovery.concurrent_streams:默认为3
indices.recovery.concurrent_small_file_streams:默认为2
indices.recovery.file_chunk_size:默认为512KB
indices.recovery.translog_ops:默认为1000
indices.recovery.translog_size:默认为512KB
indices.recovery.compress:默认为true
indices.recovery.max_bytes_per_sec:默认为40MB
TTL区间
文档有个ttl值可以设置当过期的时候是否需要删除,设置如下:
indices.ttl.interval:删除程序的运行时间。默认为60
indices.ttl.bulk_size:删除处理与批量请求的数量,默认为10000
ElasticSearch基础(4)-索引的更多相关文章
- Elasticsearch 关键字:索引,类型,字段,索引状态,mapping,文档
1. 索引(_index)索引:说的就是数据库的名字.我这个说法是对应到咱经常使用的数据库. 结合es的插件 head 来看. 可以看到,我这个地方,就有这么几个索引,索引就是数据库,后面是这个数据库 ...
- ELK(elasticsearch+kibana+logstash)搜索引擎(二): elasticsearch基础教程
1.elasticsearch的结构 首先elasticsearch目前的结构为 /index/type/id id对应的就是存储的文档ID,elasticsearch一般将数据以JSON格式存储. ...
- Elasticsearch基础知识要点QA
前言:本文为学习整理实践他人成果的记录型博客.在此统一感谢各原作者,如果你对基础知识不甚了解,可以通过查看Elasticsearch权威指南中文版, 此处注意你的elasticsearch版本,版本不 ...
- Elasticsearch 基础入门
原文地址:Elasticsearch 基础入门 博客地址:http://www.extlight.com 一.什么是 ElasticSearch ElasticSearch是一个基于 Lucene 的 ...
- 搜索引擎框架之ElasticSearch基础详解(非原创)
文章大纲 一.搜索引擎框架基础介绍二.ElasticSearch的简介三.ElasticSearch安装(Windows版本)四.ElasticSearch操作客户端工具--Kibana五.ES的常用 ...
- ElasticSearch 基础 1
ElasticSearch 基础=============================== 索引创建 ========================== 1. RESTFUL APIAPI 基本 ...
- ElasticSearch基础学习(SpringBoot集成ES)
一.概述 什么是ElasticSearch? ElasticSearch,简称为ES, ES是一个开源的高扩展的分布式全文搜索引擎. 它可以近乎实时的存储.检索数据:本身扩展性很好,可以扩展到上百台服 ...
- Elasticsearch基础但非常有用的功能之二:模板
文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484584&idx=1&sn=accfb65 ...
- Elasticsearch 之 数据索引
对于提供全文检索的工具来说,索引时一个关键的过程——只有通过索引操作,才能对数据进行分析存储.创建倒排索引,从而让使用者查询到相关的信息. 本篇就ES的数据索引操作相关的内容展开: 更多内容参考:El ...
随机推荐
- vs 插件
Visual Assist 代码提示 Indent Guides
- solr最佳实践
管理页面 页面地址:http://{ip}:{port}/solr/#/ 管理页面的data-import页可以手动重建索引,configuration指定了数据源,重建索引也可以通过http请求触发 ...
- TypeUtils -- Object 转为 强类型
public static class TypeUtils { /// <summary> /// Object 转为 强类型 /// </summary> public st ...
- 一步步优化JVM五:优化延迟或者响应时间
本节的目标是做一些优化以满足对应用对延迟的需求.这次需要几个步骤,包括完善Java堆大小的配置,评估垃圾回收占用的时间和频率,也许还要尝试切换到不同的垃圾回收器,以及由于使用了不同的垃圾回收器,需要重 ...
- 前端之Photoshop切片
什么是切片 ? (Photoshop中的切片) 切片:将图片切成几部分,一片一片往上传,这样上传的速度比较快.每个切片作为一个独立的文件传输,文件中包含切片自己的设置.颜色调板.链接.翻转效果 ...
- Elasticsearch 5.0 _all field的简单认识
前言:本文的目的是为后续磁盘空间利用优化做铺垫,主要知识点来源于官网 一._all 是什么 在Elasticsearch中,_all field维护这一个很大的字符串数组(text类型).这个字符串是 ...
- 第一百二十四节,JavaScriptCookie与存储
JavaScriptCookie与存储 学习要点: 1.cookie 2.cookie局限性 3.其他存储 随着Web越来越复杂,开发者急切的需要能够本地化存储的脚本功能.这个时候,第一个出现的方案: ...
- 笔记本光驱位安装固态硬盘及window系统一些过程记录
自己的笔记本电脑是13年买的 联想G480 i3 32位 2g内存,配置有点低,呵呵.当初刚毕业问家里要钱买的,到现在后悔没有买好一点的笔记本. 用着用着感觉内存不够用,网上就买了根内存条,买之前 ...
- Oracle 锁模式
0:none 1:null 空 2:Row-S 行共享(RS):共享表锁 3:Row-X 行专用(RX):用于行的修改 4:Share 共享锁(S):阻止其他DML操作 5:S/Row-X ...
- (从零开始java开发) IDEA+MAVEN构建一个webapp骨架项目(解决一直downloading问题)
折腾了一段时间终于解决了, 可能是因为网络问题 xml一直没法访问 maven 骨架生成项目速度慢的令人发指,都在Generating project in Batch mode等待,Idea状态显示 ...