使用 Watson Developer Cloud Node SDK 在 IBM Watson Discovery Service 中创建新文档

Create new document in IBM Watson Discovery Service with Watson Developer Cloud Node SDK

我尝试为 IBM Watson Discovery 服务创建一个新文档,我使用 watson-developer-cloud/node-sdk

文档中的内容应来自字符串而不是文件。我试过这样但没有运气

 discovery.addDocument({
    environment_id: MYENVID,
    collection_id: MYCOLID,
    metadata:'{"Content-Type":"application/json"}',
    file:Buffer.from("HERE IS MY TEXT", 'utf8')
}, function(err, data) {
    if (err) {
        return next(err);
    } else {
        return res.json(data)
    }
});

这会创建一个文档,但没有内容。 结果是这样的

{
    "id": "MYID",
    "score": 1,
    "metadata": {
        "Content-Type": "application/json"
    },
    "enriched_field_units": 0
}

有什么简单的我想念的吗?

你没有遗漏任何东西。目前正在处理的 SDK 中存在一个错误。它应该很快被修复。 https://github.com/watson-developer-cloud/node-sdk/issues/369

我知道这是一个老问题,但我想提供一个更新,因为一些额外的错误已经修复,并且在 v2.34.0 中添加了一个新的 addJsonDocument() 方法。

首先要指出的是,Discovery 在确定内容类型时会忽略元数据对象。它只查看文件名和文件内容。

text/plain 不受支持,因此对于您的确切示例,它 returns 是正确的标识和错误消息。

但是,如果您在此处替换为 valid JSON,它仍可能会将其误识别为没有适当文件名的文本。

设置 .json 文件名或使用新的 addJsonDocument() 方法可以解决问题:

  • 要设置文件名,请将 file 设置为具有 valueoptions.filename 字段的对象:

    discovery.addDocument({
        environment_id: 'env-id-here',
        collection_id: 'coll-id-here',
        configuration_id: 'config-id-here',
        file: {
          value: Buffer.from("JSON goes here", 'utf8'),
          options: {
            filename: 'whatever.json'
          }
        }
    }, function(err, data) {
        if (err) {
            console.error(err);
        } else {
            console.log(JSON.stringify(data, null, 2));
        }
    });
    
  • 或者,对于 JSON,使用 addJsonDocument():

    var document_obj = {
      environment_id: environment,
      collection_id: collection,
      file: {"foo": "bar"}
    };
    
    discovery.addJsonDocument(document_obj, function (err, response) {
      if (err) {
        console.error(err);
      } else {
        console.log(JSON.stringify(response, null, 2));
      }
    });