我可以将文本的默认类型定义为对象类型中的关键字吗?
Can I define default type for text as keyword inside an object type?
假设我有以下映射:
{
"mappings": {
"_doc": {
"properties": {
"id": {"type": "keyword"},
"params": {
"type": "object",
},
}
}
}
}
params
有很多带有数字和文本值的字段。我不想指定它的所有字段,但我想指定所有文本字段应该是 keyword
类型而不是 text
类型,这是默认的并且是分析的(我想要避免)。
我该怎么做?我正在使用 ElasticSearch 6.7
这称为动态模板(参见 https://www.elastic.co/guide/en/elasticsearch/reference/6.7/dynamic-templates.html)
对于你的问题,你可以定义映射如下:
PUT my_index
{
"mappings": {
"_doc": {
"dynamic_templates": [
{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
]
}
}
}
这会将所有检测到的 string
字段转换为 keyword
。如果只想应用于字段的子集,可以使用 match
、unmatch
、path_match
或 path_unmatch
子句。 (有关它们之间的差异,请参阅文档)。
添加 @banuj 提到的内容:
看来可以结合match_mapping_type
and path_match
来达到我想要的效果
PUT my_index
{
"mappings": {
"_doc": {
"dynamic_templates": [
{
"keyword params": {
"mapping": {
"type": "keyword"
},
"match_mapping_type": "string",
"path_match": "params.*"
}
}
]
}
}
}
假设我有以下映射:
{
"mappings": {
"_doc": {
"properties": {
"id": {"type": "keyword"},
"params": {
"type": "object",
},
}
}
}
}
params
有很多带有数字和文本值的字段。我不想指定它的所有字段,但我想指定所有文本字段应该是 keyword
类型而不是 text
类型,这是默认的并且是分析的(我想要避免)。
我该怎么做?我正在使用 ElasticSearch 6.7
这称为动态模板(参见 https://www.elastic.co/guide/en/elasticsearch/reference/6.7/dynamic-templates.html)
对于你的问题,你可以定义映射如下:
PUT my_index
{
"mappings": {
"_doc": {
"dynamic_templates": [
{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
]
}
}
}
这会将所有检测到的 string
字段转换为 keyword
。如果只想应用于字段的子集,可以使用 match
、unmatch
、path_match
或 path_unmatch
子句。 (有关它们之间的差异,请参阅文档)。
添加 @banuj 提到的内容:
看来可以结合match_mapping_type
and path_match
来达到我想要的效果
PUT my_index
{
"mappings": {
"_doc": {
"dynamic_templates": [
{
"keyword params": {
"mapping": {
"type": "keyword"
},
"match_mapping_type": "string",
"path_match": "params.*"
}
}
]
}
}
}