0

我尝试为 IBM Watson Discovery Service 创建一个新文档,并使用 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
}

我想念一些简单的事情吗?

4

2 回答 2

4

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

于 2017-01-04T21:41:58.727 回答
3

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

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

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

但是,如果您在那里替换了有效的 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));
      }
    });
    
于 2017-07-18T17:59:09.793 回答