Javascript 弹性搜索:如何映射具有动态字段数的json数据
我正在开发一个应用程序,需要映射json数据以存储在Elasticsearch中。json数据中的字段数量是动态的。那么,我如何为这个场景进行映射呢 映射片段Javascript 弹性搜索:如何映射具有动态字段数的json数据,javascript,json,elasticsearch,mapping,Javascript,Json,elasticsearch,Mapping,我正在开发一个应用程序,需要映射json数据以存储在Elasticsearch中。json数据中的字段数量是动态的。那么,我如何为这个场景进行映射呢 映射片段 var fs = uploadedFiles[0].fd; var xlsxRows = require('xlsx-rows'); var rows = xlsxRows(fs); console.log(rows); client.indices.putMapping({ "index": "te
var fs = uploadedFiles[0].fd;
var xlsxRows = require('xlsx-rows');
var rows = xlsxRows(fs);
console.log(rows);
client.indices.putMapping({
"index": "testindex",
"type": "testtype",
"body": {
"testtype": {
"properties": {
"Field 1": {
"type": "string"
},
"Field 3": {
"type": "string"
},
"Field 2":{
"type":"string"
} .....
//Don't know how many fields are in json object.
}
}
}
}, function (err, response) {
if(err){
console.log("error");
}
console.log("REAPONCE")
console.log(response);
});
这是我的示例json数据
//行的结果
[
{ Name: 'paranthn', Age: '43', Address: 'trichy' },
{ Name: 'Arthick', Age: '23', Address: 'trichy' },
{ Name: 'vel', Age: '24', Address: 'trichy' } //property fields
]
注意:属性字段的数量是动态的
ES将始终尽最大努力为文档中未定义映射和映射的字段推断正确的类型 只有在需要对设置的默认值以外的某些字段应用某些特殊处理时,才需要映射,例如指定索引分析器、搜索分析器、是否需要分析字符串字段、使用其他分析器指定子字段等
如果您不需要这些,那么您可以让ES推断您文档的映射。ES将始终尽最大努力为您文档中未定义映射和映射的字段推断正确的类型 只有在需要对设置的默认值以外的某些字段应用某些特殊处理时,才需要映射,例如指定索引分析器、搜索分析器、是否需要分析字符串字段、使用其他分析器指定子字段等
如果您不需要这些,那么您可以让ES推断文档的映射。您所说的“数字”是什么意思?我只看到名为
姓名
、年龄
和地址
的三个字段。您是否还有其他需要的字段?是的。我不知道json对象中有多少个字段。每次上传文件时,这些字段都会动态变化。还不清楚您的意思是一个文档可能包含除名称
、年龄
和地址
以外的其他字段,或者您的文档是否包含数组(即[…]
),您不知道该数组可能包含多少元素。是。文档可能包含除姓名、年龄和地址以外的其他字段。您所说的“数字”是什么意思?我只看到名为姓名
、年龄
和地址
的三个字段。您是否还有其他需要的字段?是的。我不知道json对象中有多少个字段。每次上传文件时,这些字段都会动态变化。还不清楚您的意思是一个文档可能包含除名称
、年龄
和地址
以外的其他字段,或者您的文档是否包含数组(即[…]
),您不知道该数组可能包含多少元素。是。文档可能包含除名称、年龄和地址以外的其他字段。这是否可以读取json行并将这些行分配到属性字段中?请帮助当您发现尚未映射的新字段时,您完全可以调用putMapping
将该新字段添加到映射中,在为数据编制索引之前。是否可以执行foreach循环从json对象中选取字段名并将该名称分配到/property字段中?是,您可以在解析数据时执行此操作,正如我们在《如何从json对象中分别选择字段名》中所看到的。我不知道如何执行此操作。是否可以读取json行并将这些行分配到属性字段中?请帮助您发现尚未映射的新字段,在为数据编制索引之前,您完全可以调用putMapping
将新字段添加到映射中。是否可以执行foreach循环从json对象中选取字段名并将该名称分配到/property字段中?是,您可以在解析数据时执行此操作,正如我们在“如何从json对象中分别选择字段名”中所看到的,我不知道如何执行此操作。