我遇到的情况是,我需要导入一堆可能最终存在冲突数据类型的不同数据。我决定将所有内容转换为字符串,然后如果需要数据则转换回来。我无法弄清楚如何使用javascript客户端进行Elasticsearches(ES)动态映射。
ES在他们的文档中说了什么:
{
"mappings": {
"my_type": {
"dynamic_templates": [
{ "es": {
"match": "*_es",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"analyzer": "spanish"
}
}},
{ "en": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"analyzer": "english"
}
}}
]
}}}
在他们的文档中说“匹配字符串字段,其名称以_es结尾” “匹配所有其他字符串字段”:https://www.elastic.co/guide/en/elasticsearch/guide/current/custom-dynamic-mapping.html
这是我尝试过的,但不会将所有内容转换为字符串(也尝试不使用通配符引号):
event.mappings = {
"mytype": {
"match": "*",
"mapping": {
"type": "string"
}
}
}
我也试过"match_mapping_type" : "*"
。
我试过了:esClient.indices.putMapping({index:"myindex", type:"mytype", body:mybody})
在响应和.create函数之外。
有什么提示吗?
答案 0 :(得分:0)
您的映射应该如下所示
PUT /test
{
"mappings": {
"test": {
"dynamic_templates": [
{
"en": {
"match": "*",
"mapping": {
"type": "string"
}
}
}
]
}
}
}
测试数据:
POST /test/test/1
{
"nr": 1,
"jsonDate":"2015-06-08T03:41:12-05:00",
"bool": true
}
结果映射,如ES所示:
{
"test": {
"mappings": {
"test": {
"dynamic_templates": [
{
"en": {
"mapping": {
"type": "string"
},
"match": "*"
}
}
],
"properties": {
"bool": {
"type": "string"
},
"jsonDate": {
"type": "string"
},
"nr": {
"type": "string"
}
}
}
}
}
}