0

我在我的 bluemix 帐户上创建了一项发现服务。我想从 nodejs 应用程序中查询我的文档。

我用一些聚合构建了一个查询,使用 bluemix 在线工具对其进行了测试,并且运行良好。

现在,当我从我的代码中查询集合时,无论我的参数是什么,我总是会收到我的所有文档以及丰富的文本等等。我想我错过了如何将查询属性发送到服务(如过滤器和聚合)。

这是我的代码:

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

结果总是:

{
  "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": "......

与参数值query_option无关。你能帮助我吗?

编辑

而不是query_options:queryParams,我已经使用 query:"text:CHLOE RICHARDS"并且它运行良好。现在我的问题仍然是找到正确的参数格式来添加我想要的聚合

编辑 2

所以我在 Github 上更仔细地查看了 IBM 的示例,现在参数的格式是这样的:

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

如果我只使用查询属性,它会很好。现在,如果我只使用aggregations一个,所有文档都会作为结果发回(这是可以理解的),但我没有聚合部分,所以我无法访问我的文档中的专有名称列表。

4

1 回答 1

0

您的查询看起来不正确。我将要使用,query那么您将需要构建一个查询搜索,例如text:"CHLOE RICHARDS"

如果要执行自然语言查询,则应设置参数natural_language_query

于 2017-06-29T09:15:27.470 回答