Elasticsearch 中索引有很多的配置参数,有些参数是可以在建好索引后重新进行配置和管理的。比如索引的副本,索引的分词
索引配置更新
在 REST 风格的 URL 设置中,/_settings 或者 /{index}/_settings 可以设置一个或多个索引。
更新索引副本数:
PUT http://192.168.0.222:9200/secisland/_settings
{
"index":{ "number_of_replicas":4}
}
更新分词器:
创建索引后可以添加新的分词器,添加分词器之前,必须先关闭索引,添加之后再打开索引。
PUT http://192.168.0.222:9200/secisland/_close
PUT http://192.168.0.222:9200/secisland/_settings
{
"analysis":{
"analyzer":{
"content": {
"type":"custom",
"tokenizer":"whitespace"
}
}
}
}
PUT http://192.168.0.222:9200/secisland/_open
获取配置:
# 格式
GET host:port/{index}/_settings
例如:
GET http://192.168.0.222:9200/secisland/_settings
{index}可以为 : *|_all|name1,name2,....
索引分析:
索引分析是这样一个过程:首先把文本块分析成一个个单独的词(term),为了后面的倒排索引做准备。然后标准化这些词为标准形式,提高它们的可搜索性,这些工作是分析器(analyers)完成的。一个分析器是一个组合,用于将三个功能放到一起:
- 字符过滤器:字符串经过字符过滤器(character filter)处理,它们的工作是在标记话之前处理字符串。字符过滤器能够去除 HTML标记,或者转换 “&” 为 “and”。
- 分词器:分词器(tokenizer)被标记化成独立的词。一个简单的分词器(tokenizer)可以根据空格或逗号将单词分开。
- 标记过滤器:每个词都通过所有标记过滤(token filters)处理,它可以修改词 (例如将 “Quick” 转为小写),去掉词(例如链接词:a , the , and 等),或者增加词(例如同义词项 “jump” 和 “leap”).
ElasticSearch 提供很多内置的字符过滤器,分词器,和标记过滤器。这些可以组合器来创建自定义的分析器,以应对不同的需求。
POST http://192.168.0.222:9200/_analyze/
{
"analyzer":"standard",
"text":"this is a test"
}
该结果将返回 “this is a test ” 使用标准分析器后词的解析情况。在该分析器下将会解析成 4个单词。
自定义分析器:
POST http://192.168.0.222:9200/_analyze/
{
"tokenizer":"keyword",
"char_filter":["html_strip"],
"filter":["lowercase"],
"text": "this is a <b> test </b>"
}
使用 keyword 分词器,lowercase 分词过滤器,html_strip 字符串过滤器,这三部分构成一个分析器。
上面的示例返回结果是:this is a test, 其中 html_strip 将 html 过滤掉了。
索引模版
索引模版就是创建好一个索引参数设置(settings)和映射(mapping)的模版,在创建新索引的时候指定模版名称就可以使用模版定义好的参数设置和映射。
创建索引模版:
PUT http://192.168.0.222:9200/_template/lancer_template/
{
"template":"lancer",
"settings":{ "number_of_shards":1},
"mappings":{ "type1":{"_source":{"enabled":false}}}
}
获取索引模版:
GET http://192.168.0.222:9200/_template
GET http://192.168.0.222:9200/_template/lancer_*
GET http://192.168.0.222:9200/_template/lancer_template1,lancer_template2/
删除索引模版
DELETE http://192.168.0.222:9200/_template/lancer_template1
索引监控
在 Elasticsearch 系统提供了接口来监控索引的状态,包括索引的统计信息,碎片信息,恢复的状态和分配的信息,利用这些接口可以随时监控系统索引的状态
索引统计
索引统计接口提供索引中不同内容的统计数据(其中的大多数也可以从节点级别范围取得)
获取所有聚合以及索引的统计数据:
GET http://127.0.0.1:9200/_stats
获取指定索引的统计数据:
GET http://127.0.0.1:9200/secisland/_stats
默认情况下返回所有统计数据,也可在url 在指定需要返回的特定数据
获取所有索引的混合和刷新统计数据:
GET http://127.0.01:9200/_stats/merge,refresh
获取名为 secisland 索引中类型为 type1 和 type2的文档统计数据
GET http://127.0.0.1:9200/secisland/_stats/indexing?types=type1,type2
获取分组 group1和group2的搜索统计数据:
GET http://127.0.0.1:9200/_stats/search?groups=group1,group2
返回的统计数据在索引级别发生聚合,生成名为 primaries 和 total 的聚合。其中 primaries 仅包含主分片的值,total 是主分片和从分片的累计值。
索引分片
提供 lucene 索引所在的分片信息。可以用来提供分片和索引的更多统计信息,可能是优化信息,删除的“垃圾”数据,等等。
参数包括特定的索引,多个索引或者 所有索引的分片请求如下:
GET http://192.168.0.222:9200/_segments
GET http://192.168.0.222:9200/secisland/_segments
GET http://192.168.0.222:9200/lancer_test,secisland/_segments
索引恢复
索引恢复接口提供正在进行恢复的索引分片信息。可以报告指定索引或者集群范围的恢复状态。
GET http://192.168.0.222:9200/_recovery
GET http://192.168.0.222:9200/secisland/_recovery
GET http://192.168.0.222:9200/lancer_test,secisland/_recovery
索引分片存储
提供索引分片副本的存储信息,存储信息报告分片副本存在的节点,分片副本版本,指示分片副本最近的状态以及在开启分片索引时遭遇的任何异常。
默认情况下,只列出至少一项未分配副本的分片的存储信息。
端点包括特定的索引,多个索引或者所有索引的分片:
GET http://192.168.0.222:9200/_shard_stores
GET http://192.168.0.222:9200/secisland/_shard_stores
GET http://192.168.0.222:9200/lancer_test,secisland/_shard_stores
清除缓存
清除缓存接口可以清除所有缓存,或者关联一个或者更多索引的特定缓存
POST http://192.168.0.222:9200/_cache/clear
POST http://192.168.0.222:9200/secisland/_cache/clear
POST http://192.168.0.222:9200/kimchy,elasticsearch/_cache/clear
POST http://192.168.0.222:9200/twitter/_cache/clear?query=true
POST http://192.168.0.222:9200/twitter/_cache/clear?request=true
POST http://192.168.0.222:9200/twitter/_cache/clear?fielddata=true
POST http://192.168.0.222:9200/twitter/_cache/clear?fields=foo,bar
索引刷新
刷新接口 可以明确地刷新一个或多个索引,使之前最后一次刷新之后的所有操作被执行。实时能力取决于使用的搜索引擎。例如,内部的一个请求刷新被调用,但是默认刷新时一个周期性的安排。
POST http://192.168.0.222:9200/_refresh
POST http://192.168.0.222:9200/secisland/_refresh
POST http://192.168.0.222:9200/kimchy,elasticsearch/_refresh
索引冲洗
冲洗 (flush) 接口可以通过接口冲洗一个或多个索引。索引主要通过执行冲洗将数据保存到索引存储并且清除内部事务日志,以此来释放索引的内存空间。默认的 ElasticSearch 使用内存启发式算法来自动触发冲洗操作的请求来清理内存:
POST http://192.168.0.222:9200/_flush
POST http://192.168.0.222:9200/secisland/_flush
POST http://192.168.0.222:9200/kimchy,elasticsearch/_flush
合并索引
合并接口可以强制合并一个或更多索引。合并分片数量和每个分片保存的 lucene 索引。强制合并可以通过合并来减少分片数量。调用会被阻塞直到合并完成。如果 http 连接丢失,请求会在后台继续执行,任何新的请求都会被阻塞直到前一个强制合并完成。
POST http://192.168.0.222:9200/_forcemerge/
POST http://192.168.0.222:9200/secisland/_forcemerge/
POST http://192.168.0.222:9200/kimchy,elasticsearch/__forcemerge/
合并接口接受请求参数:
- max_num_segments: 用于合并的分片数量。为了充分合并索引,设置它的值为1。默认简单地检查是否需要执行合并,如果是,执行合并。
- only_expunge_deletes: 合并过程是否只删除分片中被删除的文档。在 Lucene 中。文档不会从分片中删除,只是标记为删除。通过执行分片合并,一个不包含这些被删除的文档的新的分片会被创建。这个标识可以只合并拥有删除文档的分片。默认值为 false。注意 index.merge.policy.expunge_deletes_allowed 阈值不会被覆盖。
- flush :强制合并之后是否执行冲洗。默认为 true。