获取 IBM Discovery 的文档名称

Get document name of IBM Discovery

我已经集成了Watson DiscoveryWatson Assistant,所以用户可以从助手查询Discovery文档。截至目前,我正在显示具有最高 passage_score 的段落。现在我想显示从哪个文档中获取该段落的文档名称。下面是我的 Node.js 代码。

function main(params) {
const DiscoveryV1 = require('watson-developer-cloud/discovery/v1');
  return new Promise(function (resolve, reject) {

var discovery = new DiscoveryV1({
        url: 'https://gateway-lon.watsonplatform.net/discovery/api',
        iam_apikey:'vvvvvvvvvv',  /* watson discovery api key */
        version: '2018-12-03'
      });

      discovery.query(
        {environment_id: 'vvvvvv', /* watson discovery environment id */
        collection_id: 'vvvvvvvvvv', /* watson discovery collection id */
        natural_language_query: params.message, 
        passages: 'true'
      }, function(err, data) {
        if (err) {
          return reject(err);
        }

       return resolve(data.passages[1]);
      }); 
  });
}

有人可以建议修改以显示文档名称吗?

@msr_003 有两种方法可以处理这个问题。在段落响应中 return 编辑了提取段落的文档的 document_id。段落响应的 document_id 字段映射到查询响应中 returned 文档的 id 字段。您可以查找文档响应的 extracted_metadata.filename 字段,其中 document_id(段落的)= id(它来自的文档的)。诚然,同一个字段被两种不同的引用方式令人困惑。

另请注意,查询响应中 returned 的文档数量会影响文章来源的文档是否确实 returned。例如,假设您 return 5 个段落,并选择 return 5 个文件。 returned 中的一个或多个段落很可能来自不在 returned 的前 5 个文档中的文档。如果发生这种情况,您可以 return 在查询响应中包含更多文档,以帮助防止这种情况发生。因此,例如,当您 return 5 个段落时,return 前 100 个文档有助于防止这种情况发生。

您可以做的另一件事是使用文档详细信息 API https://cloud.ibm.com/apidocs/discovery#get-document-details 获取段落来源文档的详细信息。虽然这需要第二次 API 调用并且会更慢,但它消除了原始查询结果中未 return 文档的可能性。