2017-08-07 8 views
1

JavaでIBM Watson APIを使用してIBM Bluemix Discoveryインスタンスのコレクションに文書を追加しようとしています。私は私のプログラムを実行するときIBM Watson:コレクションに文書を追加するときの不明なAPIエラー

Discovery discovery = new Discovery("2017-08-01"); 
discovery.setEndPoint("https://gateway.watsonplatform.net/discovery/api"); 
discovery.setUsernameAndPassword("{username}", "{password}"); 
String environmentId = "{environment_id}"; 
String collectionId = "{collection_id}"; 

File f = new File("path/to/file"); 
String path = f.getPath(); 
String ext = FilenameUtils.getExtension(f.getName()); 

CreateDocumentRequest.Builder builder = new CreateDocumentRequest.Builder(environmentId, collectionId).documentId(path).file(f); 
CreateDocumentResponse createResponse = discovery.createDocument(builder.build()).execute(); 
System.out.println(createResponse.toString()); 

はしかし、私はcreateResponseが初期化されたラインから来エラーException in thread "main" com.ibm.watson.developer_cloud.service.exception.NotFoundException: Unknown API: POST [...]を取得:次のように与えられたファイルのために、私がやります。

ありがとうございます。

答えて

4

あなたは間違ったdocumentIdを持っています。

正しいドキュメントIDは "49a82bd4-xxxx-xxxx-xxxx-900b7378ff35"のようですが、パスをパラメータとして指定します。

ドキュメントを追加する場合は、デフォルトでdocumentIdの値を指定する必要はありません。

Discovery discovery = new Discovery("2017-08-01"); 
discovery.setEndPoint("https://gateway.watsonplatform.net/discovery/api");        
discovery.setUsernameAndPassword("feeb4a95-xxxx-xxxx-xxxx-4d94c98b2b24", "KQc6G5nK6HrD"); 
String environmentId = "59d0fa32-xxxx-xxxx-xxxx-cf98a8cdc52e"; 
String collectionId = "49a82bd4-xxxx-xxxx-xxxx-900b7378ff35"; 
File f = new File("/Users/xxx/Desktop/myDoc.json"); 
Path path = Paths.get(f.getPath()); 
InputStream documentStream = new ByteArrayInputStream(Files.readAllBytes(path)); 

//Create 
CreateDocumentRequest.Builder builder = new CreateDocumentRequest.Builder(environmentId, collectionId); 
builder.inputStream(documentStream, HttpMediaType.APPLICATION_JSON); 
CreateDocumentResponse createResponse = discovery.createDocument(builder.build()).execute(); 
//Retrieve (You can get documentId here) 
QueryRequest.Builder queryBuilder = new QueryRequest.Builder(environmentId, collectionId); 
QueryResponse queryResponse = discovery.query(queryBuilder.build()).execute(); 
System.out.println(queryResponse.toString()); 
//Delete 
String documentId = "d1059598-xxxx-xxxx-xxxx-b65a1f3334d8"; 
DeleteDocumentRequest deleteRequest = new DeleteDocumentRequest.Builder(environmentId, collectionId, documentId).build(); 
DeleteDocumentResponse deleteResponse = discovery.deleteDocument(deleteRequest).execute(); 
+0

ありがとうございます。それは問題を解決した。しかし、今私は質問に答えるでしょう。パスを指定して特定のドキュメントを検索したい場合、どうすればいいですか?私は文書IDを必要とし、後者は 'CreateDocumentRequest'の応答で一度しか与えられないようです。ファイル内の対応するパスにマップされたこれらのIDを保存する必要がありますか?ドキュメントを削除する場合も同じ問題があります。 –

+0

私はそれを更新しました! – TonyY

関連する問題