更新索引设置
在REST风格的url设置中设置 /_settings (所有索引)或者{index}/_settings,可以设置一个或者多个索引,例如:
请求:PUT localhost:9200/my_index/_settings
参数:
{ "index" : { "number_of_replicas" : 4 } }
更新分词器
创建索引后可以添加新的分析器。添加分析器之前必须关闭索引,添加之后再打开索引。
POST localhost:9200/myindex/_close
PUT localhost:9200/myindex/_settings
参数:
{ "analysis" : { "analyzer":{ "content":{ "type":"custom", "tokenizer":"whitespace" } } } }
POST localhost:9200/myindex/_open
如上示例,先关闭myindex索引,然后添加自定义分析器,分析器策略是空格分析器(whitespace),就是按照空格进行分词。
获取索引参数:
GET http://localhost:9200/twitter/_settings
获取索引配置参数的请求格式如下:
host:port/{index}/_settings
host:主机名
port:端口号
{index}:接收多种格式,* | _all | name1, name2, …
过滤配置参数结果
GET 'http://localhost:9200/twitter/_settings/name=index.number_*'
name=index.number_*设置将只返回number_of_replicas,number_of_shards两个参数详情。
分析(analysis)是这样一个过程:
首先,标记化一个文本块为适用于倒排索引单独的词(term)
然后标准化这些词为标准形式,提高它们的“可搜索性”或“查全率”
这个工作是分析器(analyzer)完成的。一个分析器(analyzer)只是一个包装用于将三个功能放到一起:
字符过滤器
首先字符串经过字符过滤器(character filter),它们的工作是在标记化前处理字符串。字符过滤器能够去除HTML标记,或者转换"&"为"and"。
分词器
下一步,分词器(tokenizer)被标记化成独立的词。一个简单的分词器(tokenizer)可以根据空格或逗号将单词分开(译者注:这个在中文中不适用)。
标记过滤
最后,每个词都通过所有标记过滤(token filters),它可以修改词(例如将"Quick"转为小写),去掉词(例如停用词像"a"、"and"``"the"等等),或者增加词(例如同义词像"jump"和"leap")
Elasticsearch提供很多开箱即用的字符过滤器,分词器和标记过滤器。这些可以组合来创建自定义的分析器以应对不同的需求。
测试分析器:
curl -XGET 'localhost:9200/_analyze' -d '
{
"analyzer" : "standard",
"text" : "this is a test"
}'
该结果将返回”this is a test”使用standard分析器后词的解析情况。
在该分析器下,将会分析称this,is,a,test四个词。
自定义分析器
curl -XGET 'localhost:9200/_analyze' -d '
{
"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字符。
也可以指定索引进行分词。url格式如下:
localhost:9200/test/_analyze
索引详情
如果想获取分析器分析的更多细节,设置explain属性为true(默认是false),将输出分词器的分词详情。请求格式如下:
请求:GET test/_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 } ] } ] } }
创建索引模板
索引模板就是创建好一个索引参数设置(settings)和映射(mapping)的模板,在创建新索引的时候指定模板名称就可以使用模板定义好的参数设置和映射。例子如下:
请求:PUT localhost:9200/_template/template_1
{ "template" : "te*", "settings" : { "number_of_shards" : 1 }, "mappings" : { "type1" : { "_source" : { "enabled" : false } } } }
定义好模板可使用te*来适配,分片数量为1,默认文档类型type1,_source的enabled为false。
也可以在模板中定义别名等其他属性。
删除索引模板
curl -XDELETE localhost:9200/_template/template_1
template_1为之前创建的索引模板名称。
获取索引模板
curl -XGET localhost:9200/_template/template_1
使用通配符或逗号分隔符
curl -XGET localhost:9200/_template/temp*
curl -XGET localhost:9200/_template/template_1,template_2
获取所有索引模板
curl -XGET localhost:9200/_template/
判断索引模板是否存在
curl -XHEAD -i localhost:9200/_template/template_1
多个模板匹配
有这样一种情况,template_1,template_2两个模板,使用te*会匹配2个模板,最后合并两个模板的配置,如果配置重复,这时应该设置order属性,order是从0开始的数字,先匹配order数字小的,再匹配数字大的,如果有相同的属性配置,后匹配的会覆盖之前的配置。
赛克蓝德(secisland)后续会逐步对Elasticsearch的最新版本的各项功能进行分析,近请期待。也欢迎加入
secisland公众号进行关注。