背景
在我的节点应用程序中,我试图索引SQL表中返回的值。我一直在阅读文档,我认为我应该使用批量功能来做到这一点。我正在尝试使用嵌套的数据类型,但发现文档尚不清楚。
这里有三个功能。
- 索引
- putMapping
- 批量
当我尝试添加一个索引时,它可以正常工作。但是,当我尝试添加批量索引时,它说该索引不存在。这使我假设需要创建索引,然后使用putMapping
添加嵌套映射。无论哪种方式,我都会遇到错误。我最近收到错误消息
“请求正文为必填项”},“状态”:400}',
问题
尝试创建没有主体键的索引时出现此错误。我当时想我需要先使用映射创建索引,这样我才能输入大量数据。我认为我的问题是我没有使用正确的功能。
示例
索引
exports.createIndex = () => {
esClient.index({
index: "products",
type: "product",
refresh: "true"
}, (error, response) => {
if(error) {
console.log('Put Index Error ', error);
} else {
this.createMapping();
console.log('Put Index Response ', response);
}
});
};
putMapping
exports.createMapping = () => {
esClient.indices.putMapping({
index: "products",
type: "product",
body: {
mappings: {
product: {
properties: {
variantId: { type: "text" },
productId: { type: "text" },
keyStrengths: { type: "text" },
something: {
type: "nested",
properties: {
type: { type: "text" },
label: { type: "text" },
items: {
type: "nested",
properties: {
value: {
type: "text"
},
characteristic: {
type: "text"
}
}
}
}
}
}
}
}
}
}, (error, response) => {
if(error) {
console.log('Put Index Error ', error);
} else {
console.log('Put Index Response ', response);
}
});
};
批量
esClient.bulk({})
问题
请告诉我创建新索引的正确方法,然后批量插入从数据库返回的数据。我不清楚是否需要使用所有这三个功能,或者我在哪里出错了。
我的目标是批量插入具有以下内容的对象的数组 其中的物体。
答案 0 :(得分:2)
您没有使用正确的功能。 esClient.index()
旨在为文档建立索引,而不是创建索引。针对您的情况,正确的做法是调用esClient.indices.create()
,以便使用适当的映射创建索引,然后可以调用esClient.bulk()
。它是这样的:
exports.createIndex = () => {
esClient.indices.create({
index: "products",
body: {
mappings: {
product: {
properties: {
variantId: { type: "text" },
productId: { type: "text" },
keyStrengths: { type: "text" },
something: {
type: "nested",
properties: {
type: { type: "text" },
label: { type: "text" },
items: {
type: "nested",
properties: {
value: {
type: "text"
},
characteristic: {
type: "text"
}
}
}
}
}
}
}
}
}
}, (error, response) => {
if(error) {
console.log('Create Index Error ', error);
} else {
console.log('Create Index Response ', response);
}
});
};
完成后,您可以调用esClient.bulk()
并从数据库中提取数据。