/ / Мені потрібна допомога у з'ясуванні правильного синтаксису функції Watson-developer-cloud Node.js, щоб вставити документ у службу відкриття Watson - javascript, node.js, ibm-watson, watson-discovery

Мені потрібна допомога у з'ясуванні правильного синтаксису функції Node.js для роботи з Watson-developer-cloud для вставки документа в службу Watson's Discovery - javascript, node.js, ibm-watson, watson-discovery

Я намагаюся вставити документи JSON у колекцію Discovery за допомогою Node.js watson-developer-cloud-хмара JDK. Це відповідний код:

var DiscoveryV1=require("watson-developer-cloud/discovery/v1");
var discovery=new DiscoveryV1(credentials);

let doc=aSmallValidJsonObject;
let parms={
environment_id: envID,
collection_id: collID,
configuration_id: confID,
file: {
value: new Buffer(JSON.stringify(doc)),
options:{
contentType:"application/json",
"Content-Type":"application/json" //just to be sure
}
}
};
discovery.addDocument(parms,
function(err,results)
{
if (err) {...

Помилка повернення цього дзвінка є

"Error: Request must specify either a "metadata" or "file" part"

Я також спробував зробити парм сюди:

let parms={
environment_id: envID,
collection_id: collID,
configuration_id: confID,
metadata:{"Content-Type":"application/json"},
file:new Buffer(JSON.stringify(doc))
};

Я отримую помилку в цьому випадку

[TypeError: source.on is not a function]

(Я простежив цю помилку до рядка 33 у бібліотеці delayed_stream.js)

Якщо я зроблю метадані поле рядка (тобто додайте значення в одиничні лапки) у вищезгаданих пармах, я отримую цю помилку:

Error: The Media Type [application/octet-stream] of the input document is not supported. Auto correction was attempted, but the auto detected media type [text/plain] is also not supported. Supported Media Types are: application/json, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/pdf, text/html, application/xhtml+xml

Хтось може сказати мені, що правильний синтаксис для цієї функції?

Відповіді:

0 для відповіді № 1

У мене були ті ж проблеми зwatson-developer-хмара SDK і при публікації безпосередньо в API без SDK. Єдиний спосіб, коли я міг би змусити його працювати, - це ігнорування файлу та надсилання вмісту документу як частини метаданих безпосередньо до API (наприклад, використання пакета запитів).

var options = {
uri:"https://gateway.watsonplatform.net/discovery/api/v1/environments/"+process.env.DISCOVERY_ENVIRONMENT_ID+"/collections/"+process.env.DISCOVERY_COLLECTION_ID+"/documents?version=2016-12-01&configuration_id="+process.env.DISCOVERY_CONFIGURATION_ID,
method: "POST",
formData: {
metadata: {
doc: JSON.stringify(doc)
}
},
auth: {
user: process.env.DISCOVERY_USERNAME,
pass: process.env.DISCOVERY_PASSWORD
},
};

request(options, function(err, httpResponse, body){
if(err){
console.log(err);
}
console.dir(body);
});

Потім потрібно налаштувати свою колекцію, щоб використовувати документ у метаданих для будь-якого збагачення та пам’ятати, що запити проти метаданих.


0 для відповіді № 2

Потрібна файлова система (fs) бібліотека, щоб правильно відправити документ, якщо вихочете надіслати одного документа всередині комп'ютера HD. Помилка здається, що заголовок у ваших параметрах не визнається. Спробуйте офіційний приклад чи мій приклад:

Офіційний довідник API показує один приклад для addDocument, наприклад:

var DiscoveryV1 = require("watson-developer-cloud/discovery/v1");
var fs = require("fs");

var discovery = new DiscoveryV1({
username: "{username}",
password: "{password}",
version_date: "2017-06-25"
});

var file = fs.readFileSync("{/path/to/file}");

discovery.addDocument(("{environment_id}", "{collection_id}", file),
function(error, data) {
console.log(JSON.stringify(data, null, 2));
});

У вашому прикладі:

discovery.addDocument({
environment_id: yourEnvId,
collection_id: yourCollId,
metadata:"{"Content-Type":"application/json"}",
file: Buffer.from(doc)
}, function(err, data) {
if (err) {
return next(err);
} else {
return res.json(data)
}
});