世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
问 :alias field type有什么特点?
答 :
1. alias是field的别名
2. alias只用于搜索(查询、聚合、排序)
3. 一个alias不能映射多个fields
4. 一个field可以有多个alias
5. 不能用alias获取文档field的值
6. alias不在_source中显示
7. alias可以修改为指向另一个field
问 :alias field type如何使用?
答 :
1. 基本使用
# alias
# 配置项 :
# 1. path : field名
PUT /alias_test
{
"mappings" : {
"properties" : {
"my_name" : {"type" : "keyword"},
"my_alias" : {
"type" : "alias",
"path" : "my_name"
}
}
}
}
POST /alias_test/_doc
{
"my_name" : "hello"
}
POST /alias_test/_doc
{
"my_name" : "good"
}
# 用别名搜索
GET /alias_test/_search
{
"query" : {
"match" : {
"my_alias": "good"
}
}
}
# 结果
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.6931471,
"hits" : [
{
"_index" : "alias_test",
"_type" : "_doc",
"_id" : "32uy1ncBnJvha9PMQIwX",
"_score" : 0.6931471,
"_source" : {
"my_name" : "good"
}
}
]
}
}
# 通配符查找别名
GET /alias_test/_field_caps?fields=my*
# 结果
{
"indices" : [
"alias_test"
],
"fields" : {
"my_name" : {
"keyword" : {
"type" : "keyword",
"searchable" : true,
"aggregatable" : true
}
},
"my_alias" : {
"keyword" : {
"type" : "keyword",
"searchable" : true,
"aggregatable" : true
}
}
}
}
2. 多个别名
# 一个field可以有多个alias
PUT /alias_test2
{
"mappings" : {
"properties" : {
"my_name" : {"type" : "keyword"},
"my_alias" : {
"type" : "alias",
"path" : "my_name"
},
"my_alias2" : {
"type" : "alias",
"path" : "my_name"
}
}
}
}
# 通配符查找别名
GET /alias_test2/_field_caps?fields=my*
# 结果
{
"indices" : [
"alias_test2"
],
"fields" : {
"my_name" : {
"keyword" : {
"type" : "keyword",
"searchable" : true,
"aggregatable" : true
}
},
"my_alias" : {
"keyword" : {
"type" : "keyword",
"searchable" : true,
"aggregatable" : true
}
},
"my_alias2" : {
"keyword" : {
"type" : "keyword",
"searchable" : true,
"aggregatable" : true
}
}
}
}
3. 修改指向
PUT /alias_test3
{
"mappings" : {
"properties" : {
"my_name" : {"type" : "keyword"},
"my_alias" : {
"type" : "alias",
"path" : "my_name"
},
"my_alias2" : {
"type" : "alias",
"path" : "my_name"
},
"my_addr" : {"type" : "text"}
}
}
}
GET /alias_test3/_mapping
# 结果
{
"alias_test3" : {
"mappings" : {
"properties" : {
"my_addr" : {
"type" : "text"
},
"my_alias" : {
"type" : "alias",
"path" : "my_name"
},
"my_alias2" : {
"type" : "alias",
"path" : "my_name"
},
"my_name" : {
"type" : "keyword"
}
}
}
}
}
# 修改别名指向
PUT /alias_test3/_mapping
{
"properties" : {
"my_alias2" : {
"type" : "alias",
"path" : "my_addr"
}
}
}
GET /alias_test3/_mapping
# 结果
{
"alias_test3" : {
"mappings" : {
"properties" : {
"my_addr" : {
"type" : "text"
},
"my_alias" : {
"type" : "alias",
"path" : "my_name"
},
"my_alias2" : {
"type" : "alias",
"path" : "my_addr"
},
"my_name" : {
"type" : "keyword"
}
}
}
}
}