我正在开发聊天应用程序,我需要使用nodejs将聊天信息推送到elasticsearch以获取指定的索引。
我使用下面的代码创建索引并将数据推送到elasticsearch 。
var elasticsearch = require('elasticsearch');
var client = new elasticsearch.Client({
host: 'localhost:9200',
log: 'trace'
});
client.ping({
requestTimeout: 30000,
// undocumented params are appended to the query string
hello: "elasticsearch"
}, function (error) {
if (error) {
console.error('elasticsearch cluster is down!');
} else {
console.log('All is well');
}
});
var result = client.index({
index: 'chennaiboxchat',
type: 'posts',
id: '1',
body: {
"glossary": {
"title": "example Test",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "mark"
}
}
}
}
},
refresh: true
});
但是,如果我下次覆盖data.so时运行此代码,我需要使用Nodejs在elasticsearch中使用相同索引更新数据。建议我如何更新单个索引中的数据。
答案 0 :(得分:2)
默认情况下,您必须提供完整的文档。因此,使用get获取文档,更改要更改的字段并像以前一样将文档放回原位。有一个更新API只提供部分文件。这实际上是一样的,但是弹性搜索可以为你获取和放置部分。如果你真的想这样做,通常你想用版本属性做一些事情。更多信息可以在这里找到: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html#_updates_with_a_partial_document
node.js使用的javascript驱动程序也支持更新端点。检查文档: https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-update