Elasticsearch的索引配置管理
1、更新索引配置
在REST风格的URL设置中设置/_settings(所有索引)或者{index}/_settings,可以设置一个或者多个索引。
请求:PUT http://127.0.0.1:9200/secisland/_settings
参数:{"index": {"number_of_replicas": 4}}
更新分词器。创建索引后可以添加新的分词器。添加分词器之前必须先关闭索引,添加之后再打开索引。
请求:POST http://127.0.0.1:9200/secisland/_close
请求:PUT http://127.0.0.1:9200/secisland/_settings
参数:{"analysis": {"analyzer": {"content": {"type": "custom", "tokenizer": "whitespace"}}}}
请求:POST http://127.0.0.1:9200/secisland/_open
如上示例,先关闭secisland索引,然后添加自定义分词器,分词器策略是空格分词器(whitespace),就是按照空格进行分词。
2、获取配置
索引中包含很多配置参数,可以通过下面命令获取索引的参数配置。
请求:GET http://127.0.0.1:9200/secisland/_settings
获取索引配置参数的请求格式如下。
请求:host:port/{index}/_settings
{index}为索引名称,可以接收多种参数格式:*|_all|name1,name2,...
过滤配置参数的返回结果。
请求:GET http://127.0.0.1:9200/secisland/_settings/name=index.number_*
name=index.number_*设置将只返回number_of_replicas,number_of_shards两个参数详情。
3、索引分析
索引分析(analysis)是这样一个过程:首先,把一个文本块分析成一个个单独的词(term),为了后面的倒排索引做准备。然后标准化这些词为标准形式,提高他们的“可搜索性”。这些工作是分析器(analyzers)完成的。一个分析器(analyzers)是一个组合,用于将三个功能放到一起:
1) 字符过滤器:字符串经过字符过滤器(character filter)处理,它们的工作是在标记化之前处理字符串。字符过滤器能够去除HTML标记,或者转换“&”为“and”。
2) 分词器:分词器(tokenizer)被标记化成独立的词。一个简单的分词器(tokenizer)可以根据空格或逗号将单词分开。
3) 标记过滤器:每个词都通过所有标记过滤(token filters)处理,它可以修改词(例如将“Quick”转为小写),去掉词(例如连接词像“a”、“and”、“the”等),或者增加词(例如同义词像“jump”和“leap”)。
Elasticsearch提供很多内置的字符过滤器,分词器和标记过滤器。这些可以组合起来创建自定义的分析器以应对不同的需求。
测试分析器。
请求:POST 127.0.0.1:9200/_analyze
参数:{"analyzer": "standard", "text": "this is a test"}
该结果将返回“this is a test”使用standard分析器后词的解析情况。在该分析器下,将会分析成this,is,a,test四个词。
自定义分析器。
请求:POST 127.0.0.1:9200/_analyze
参数:{"tokenizer": "keyword", "token_filters": ["lowercase"], "char_filters": ["html_strip"], "text": "this is a <b>test</b>"}
使用keyword分词器、lowercase分词过滤、字符过滤器是html_strip,这3部分构成一个分词器。
上面示例返回分词结果是this is a test,其中html_strip过滤掉了html字符。
也可以指定索引进行分词。
请求:POST http://127.0.0.1:9200/secisland/_analyze
索引详情如下:如果想获取分析器分析的更多细节,设置explain属性为true(默认是false),将输出分词其的分词详情。
请求:POST http://127.0.0.1:9200/secisland/_analyze
参数:{"tokenizer": "standard", "token_filters": ["snowball"]. "text": "detailed output", "explain": true, "attributes": ["keyword"]}
返回值:{"detail": {"custom_analyzer": true, "charfilters": [], "tokenizer": {"name": "standard", "tokens": [{"token": "detailed", "start_offset": 0, "end_offset": 8, "type": "<ALPHANUM>", "position": 0}, {"token": "output", "start_offset": 9, "end_offset": 15, "type": "<ALPHANUM>", "position": 1}]}, "tokenfilters": [{"name": "snowball", "tokens": [{"token": "detail", "start_offset": 0, "end_offset": 8, "type": "<ALPHANUM>", "position": 0, "keyword": false}, {"token": "output", "start_offset": 9, "end_offset": 15, "type": "<ALPHANUM>", "position": 1, "keyword": false}]}]}}
4、索引模板
4.1、创建索引模板
索引模板就是创建好一个索引参数设置(settings)和映射(mapping)的模板,在创建新索引的时候指定模板名称就可以使用模板定义好的参数设置和映射。
请求:PUT http://127.0.0.1:9200/_template/template_1
参数:{"template": "te*", "settings": {"number_of_shards": 1}, "mappings": {"type1": {"_source": {"enabled": false}}}}
定义好模板可使用te*来适配,分片数量为1,默认文档类型type1,_source的enabled为false。
也可以在模板中定义别名等其他属性。
4.2、删除索引模板
请求:DELETE http://127.0.0.1:9200/_template/template_1
template_1为之前创建的索引模板名称。
4.3、获取索引模板
请求:GET http://127.0.0.1:9200/_template/template_1
使用通配符或逗号分隔符。
请求:GET http://127.0.0.1:9200/_template/temp*
请求:GET http://127.0.0.1:9200/_template/template_1,template_2
获取所有索引模板。
请求:GET http://127.0.0.1:9200/_template
判断索引模板是否存在。
请求:HEAD http://127.0.0.1:9200/_template/template_1
4.4、多个模板匹配
有这样一种情况:template_1、tempalte_2两个模板,使用te*会匹配2个模板,最后合并两个模板的配置。如果配置重复,这时应该设置order属性,order是从0开始的数字,先匹配order数字小的,在匹配数字大的,如果有相同的属性配置,后匹配的会覆盖之前的配置。