/ / Ich brauche Hilfe bei der Ermittlung der korrekten Syntax für die Watson-developer-cloud-Funktion Node.js, um ein Dokument in den Watson Discovery-Dienst einzufügen - Javascript, node.js, ibm-watson, watson-discovery

Ich brauche Hilfe bei der Ermittlung der korrekten Syntax für die Watson-developer-cloud-Funktion Node.js, um ein Dokument in Watsons Discovery-Dienst einzufügen - Javascript, node.js, ibm-watson, watson-discovery

Ich versuche, JSON-Dokumente mit dem Watson-developer-cloud-JDK Node.js in eine Discovery-Sammlung einzufügen. Dies ist der relevante Code:

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) {...

Der von diesem Aufruf zurückgegebene Fehler lautet

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

Ich habe auch versucht zu machen Parms diesen Weg:

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

Der Fehler bekomme ich in diesem Fall

[TypeError: source.on is not a function]

(Ich habe diesen Fehler auf Zeile 33 in der Bibliothek zurückgeführt delayed_stream.js)

Wenn ich das mache Metadaten Feld eine Zeichenfolge (d. h. den Wert in einfache Anführungszeichen einschließen) in den obigen Parametern, erhalte ich diesen Fehler:

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

Kann mir jemand sagen, welche Syntax für diese Funktion korrekt ist?

Antworten:

0 für die Antwort № 1

Ich hatte das gleiche Problem mit demwatson-developer-cloud-SDK und bei der Veröffentlichung direkt an die API ohne das SDK. Die einzige Möglichkeit, dies zu erreichen, bestand darin, die Datei zu ignorieren und meinen Dokumentinhalt als Teil der Metadaten direkt an die API zu senden (Beispiel mit dem Anforderungspaket).

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);
});

Sie müssen Ihre Sammlung dann so konfigurieren, dass das Dokument in den Metadaten für Anreicherungen verwendet wird, und denken Sie daran, die Metadaten abzufragen.


0 für die Antwort № 2

Erfordert das Dateisystem (fs) Bibliothek, um das Dokument korrekt zu senden, wenn Siemöchte ein Dokument in Ihrem Computer HD senden. Der Fehler scheint, als würde der Header in Ihren Optionen nicht erkannt. Versuchen Sie es mit dem offiziellen Beispiel oder meinem Beispiel:

Die offizielle API-Referenz zeigt ein Beispiel für addDocument wie:

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));
});

Mit Ihrem Beispiel:

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)
}
});