一、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)-索引的更多相关文章

  1. Elasticsearch 关键字:索引,类型,字段,索引状态,mapping,文档

    1. 索引(_index)索引:说的就是数据库的名字.我这个说法是对应到咱经常使用的数据库. 结合es的插件 head 来看. 可以看到,我这个地方,就有这么几个索引,索引就是数据库,后面是这个数据库 ...

  2. ELK(elasticsearch+kibana+logstash)搜索引擎(二): elasticsearch基础教程

    1.elasticsearch的结构 首先elasticsearch目前的结构为 /index/type/id  id对应的就是存储的文档ID,elasticsearch一般将数据以JSON格式存储. ...

  3. Elasticsearch基础知识要点QA

    前言:本文为学习整理实践他人成果的记录型博客.在此统一感谢各原作者,如果你对基础知识不甚了解,可以通过查看Elasticsearch权威指南中文版, 此处注意你的elasticsearch版本,版本不 ...

  4. Elasticsearch 基础入门

    原文地址:Elasticsearch 基础入门 博客地址:http://www.extlight.com 一.什么是 ElasticSearch ElasticSearch是一个基于 Lucene 的 ...

  5. 搜索引擎框架之ElasticSearch基础详解(非原创)

    文章大纲 一.搜索引擎框架基础介绍二.ElasticSearch的简介三.ElasticSearch安装(Windows版本)四.ElasticSearch操作客户端工具--Kibana五.ES的常用 ...

  6. ElasticSearch 基础 1

    ElasticSearch 基础=============================== 索引创建 ========================== 1. RESTFUL APIAPI 基本 ...

  7. ElasticSearch基础学习(SpringBoot集成ES)

    一.概述 什么是ElasticSearch? ElasticSearch,简称为ES, ES是一个开源的高扩展的分布式全文搜索引擎. 它可以近乎实时的存储.检索数据:本身扩展性很好,可以扩展到上百台服 ...

  8. Elasticsearch基础但非常有用的功能之二:模板

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484584&idx=1&sn=accfb65 ...

  9. Elasticsearch 之 数据索引

    对于提供全文检索的工具来说,索引时一个关键的过程——只有通过索引操作,才能对数据进行分析存储.创建倒排索引,从而让使用者查询到相关的信息. 本篇就ES的数据索引操作相关的内容展开: 更多内容参考:El ...

随机推荐

  1. vs 插件

    Visual Assist 代码提示 Indent Guides

  2. solr最佳实践

    管理页面 页面地址:http://{ip}:{port}/solr/#/ 管理页面的data-import页可以手动重建索引,configuration指定了数据源,重建索引也可以通过http请求触发 ...

  3. TypeUtils -- Object 转为 强类型

    public static class TypeUtils { /// <summary> /// Object 转为 强类型 /// </summary> public st ...

  4. 一步步优化JVM五:优化延迟或者响应时间

    本节的目标是做一些优化以满足对应用对延迟的需求.这次需要几个步骤,包括完善Java堆大小的配置,评估垃圾回收占用的时间和频率,也许还要尝试切换到不同的垃圾回收器,以及由于使用了不同的垃圾回收器,需要重 ...

  5. 前端之Photoshop切片

    什么是切片 ?     (Photoshop中的切片) 切片:将图片切成几部分,一片一片往上传,这样上传的速度比较快.每个切片作为一个独立的文件传输,文件中包含切片自己的设置.颜色调板.链接.翻转效果 ...

  6. Elasticsearch 5.0 _all field的简单认识

    前言:本文的目的是为后续磁盘空间利用优化做铺垫,主要知识点来源于官网 一._all 是什么 在Elasticsearch中,_all field维护这一个很大的字符串数组(text类型).这个字符串是 ...

  7. 第一百二十四节,JavaScriptCookie与存储

    JavaScriptCookie与存储 学习要点: 1.cookie 2.cookie局限性 3.其他存储 随着Web越来越复杂,开发者急切的需要能够本地化存储的脚本功能.这个时候,第一个出现的方案: ...

  8. 笔记本光驱位安装固态硬盘及window系统一些过程记录

    自己的笔记本电脑是13年买的  联想G480 i3  32位 2g内存,配置有点低,呵呵.当初刚毕业问家里要钱买的,到现在后悔没有买好一点的笔记本. 用着用着感觉内存不够用,网上就买了根内存条,买之前 ...

  9. Oracle 锁模式

    0:none  1:null 空  2:Row-S 行共享(RS):共享表锁  3:Row-X 行专用(RX):用于行的修改  4:Share 共享锁(S):阻止其他DML操作  5:S/Row-X ...

  10. (从零开始java开发) IDEA+MAVEN构建一个webapp骨架项目(解决一直downloading问题)

    折腾了一段时间终于解决了, 可能是因为网络问题 xml一直没法访问 maven 骨架生成项目速度慢的令人发指,都在Generating project in Batch mode等待,Idea状态显示 ...