2017-06-28 2 views
0

Ich habe einen Discovery-Dienst auf meinem bluemix-Konto erstellt. Ich möchte meine Dokumente aus einer Nodejs-Anwendung abfragen.IBM Bluemix Discovery - Abfrageparameter

Ich habe eine Abfrage mit etwas Aggregation erstellt, getestet mit dem bluemix Online-Tool und es funktioniert gut.

Jetzt, wenn ich die Sammlung von meinem Code abfrage, was auch immer meine Parameter sind, erhalte ich immer alle meine Dokumente mit dem angereicherten Text und so weiter. Ich denke, ich vermisse, wie die Abfrage-Attribute an den Dienst gesendet werden (wie Filter und Aggregationen).

Hier ist mein Code:

var queryParams = { 
    query:'CHLOE RICHARDS', 
    return:'title', 
    count:1, 
    aggregations:'nested(enriched_text.entities).filter(enriched_text.entities.type:Person).term(enriched_text.entities.text, count:5)' 
}; 

discovery.query({environment_id:that.environment_id, collection_id:that.collection_id, query_options:queryParams }, function(error, data) { 
    if(error){ 
    console.error(error); 
    reject(error); 
    } 
    else{ 
    console.log(JSON.stringify(data, null, 2)); 
    resolve(data.matching_results); 
    } 
}); 

Und das Ergebnis ist immer:

{ 
    "matching_results": 28, 
    "results": [ 
    { 
     "id": "fe5e2a38e6cccfbd97dbdd0c33c9c8fd", 
     "score": 1, 
     "extracted_metadata": { 
     "publicationdate": "2016-01-05", 
     "sha1": "28434b0a7e2a94dd62cabe9b5a82e98766584dd412", 
     "author": "Richardson, Heather S", 
     "filename": "whatever.docx", 
     "file_type": "word", 
     "title": "no title" 
     }, 
     "text": "...... 

unabhängig voneinander von dem Wert des query_option Parameter. Kannst du mir helfen?

EDIT

Statt der query_options:queryParams, ich habe query:"text:CHLOE RICHARDS" verwendet und es gut funktioniert. Nun mein Problem bleibt nach wie vor das Recht Parameter Format zu finden, um die Aggregationen hinzufügen Ich möchte

EDIT 2

So habe ich bei IBM's example on Github mehr sorgfältig geprüft, und die Parameter werden nun wie folgt formatiert:

const queryParams = { 
    count: 5, 
    return: 'title,enrichedTitle.text', 
    query: '"CHLOE RICHARDS"', 
    aggregations: [ 'nested(enriched_text.entities).filter(enriched_text.entities.type:Person).term(enriched_text.entities.text, count:5)' ], 
    environment_id: '1111111111', 
    collection_id: '11111111111' 
}; 

Es funktioniert gut, wenn ich nur das Query-Attribut verwende. Wenn ich jetzt nur die aggregations benutze, werden alle Dokumente als Ergebnis zurückgeschickt (was verständlich ist), aber ich habe keinen Aggregationsteil, daher kann ich nicht auf die Liste mit dem richtigen Namen in meinen Dokumenten zugreifen.

Antwort

0

Ihre Anfrage sieht nicht richtig aus. Ich Sie gehen query zu verwenden, dann werden Sie eine Suchanfrage wie text:"CHLOE RICHARDS"

konstruieren müssen Wenn Sie eine Abfrage in natürlicher Sprache durchführen möchten, dann sollten Sie den Parameter natural_language_query einstellen werden.

+0

Hallo! Vielen Dank für Ihre Antwort. Es sieht so aus als ob. Ich habe 'text:" CHLOE RICHARDS "' mit dem gleichen Ergebnis verwendet. Wenn überhaupt, sollte diese Anforderung nur ein Dokument, nicht 28 senden. – nakurai

+0

Auch in der [Watson Discovey API-Referenz] (https://www.ibm.com/watson/developercloud/discovery/api/v1/?node#) Query-Collection), es gibt keinen 'Text' unter der Abfrage-Option, nur' query' ... – nakurai

+0

Ich glaube, ich beginne zu verstehen, was du meintest, sehe die Bearbeitung meiner Frage .... wie würdest du das vervollständigen? Abfrageparameter, um eine Aggregation hinzuzufügen? – nakurai