Elasticsearch索引数据在Kibana中显示为Buffer类型如何解决
问题原因
你的索引操作核心问题出在两个地方:
- 传入ES的字段值类型错误:你代码里
Value字段赋值的fieldData.fieldHTMLText是Node.js的Buffer二进制对象,不是字符串类型。Elasticsearch的JS客户端序列化时会直接把Buffer的结构(包含type: "Buffer"标识和字节数组data)转成JSON写入索引,不会自动帮你转成明文文本。 - 你查询的索引不匹配:你代码里指定写入的索引是
project_documents_textfielddata,但贴出来的Kibana返回样例里_index字段是documenttextfile.files,两个索引完全不是同一个,你当前查到的是其他存储二进制文件的索引数据,不是你代码写入的目标数据。
你写的索引API调用本身的参数(id、routing、索引名传参)没有语法错误,不需要调整结构。
修复步骤
- 先转码字段再写入
在调用client.index前,先把Buffer类型的字段转成UTF-8字符串,修改Value字段赋值逻辑:
写入前可以加一行校验确认类型:await client.index({ id: fieldId.toString(), index: 'project_documents_textfielddata', body: { FieldId: fieldId, DocumentId: documentId, // 把Buffer转成utf8明文字符串再传入 Value: fieldData.fieldHTMLText.toString('utf8'), }, routing: projectId.toString(), });console.log(Buffer.isBuffer(fieldData.fieldHTMLText)),如果返回true就确认是Buffer类型问题,转码后再写入即可。 - 切换Kibana查询的目标索引
进入Kibana Discover页后,左上角索引选择器切换到你写入的project_documents_textfielddata对应的索引模式,不要查documenttextfile.files这个存二进制文件的索引。 - 清理错误历史数据
之前误写入Buffer结构的旧文档,可以通过删除索引重导、或者update_by_query接口批量修复,不然旧数据永远是二进制Buffer结构,无法直接查看明文。
Kibana查看原始明文数据的方法
修复写入逻辑、选对索引之后,直接在Discover页展开文档的_source字段,就能看到和MongoDB Compass一致的原始存储明文结构,不需要额外配置格式化规则,字符串字段会直接展示明文内容,不会再出现字节数组形式的Buffer结构。
内容的提问来源于stack exchange,提问作者Anonymous Creator
相关产品推荐
相关产品推荐

