为什么使用cts搜索数组与使用节点api搜索数组为何不同?

时间:2018-09-28 23:52:18

标签: node.js marklogic

我有一个与此问题类似的问题: Marklogic (Nodejs API) - Search documents that match 2 (or more) conditions in object array attribute

我有以下文件:

{
  "address": [
    { "type": "mailing",
      "street": "1001 Main Street",
      "city": "Springfield",
      "state": "MO"
    },
    { "type": "location",
      "street": "989 First Street",
      "city": "Johnstone",
      "state": "WY"
    }
  ]
}

当我在查询控制台中运行以下代码时,它不会正确返回文档:

'use strict';

const queryText = 
  cts.jsonPropertyScopeQuery("address", cts.andQuery([
    cts.jsonPropertyWordQuery("city", "Johnstone"),
    cts.jsonPropertyWordQuery("state", "MO")
  ]));

cts.search(queryText);

当我在Node.js中运行此代码时,它确实返回了文档,因为它在评估时似乎合并了所有数组节点。

const queryText =
  qb.scope(qb.property("address"), qb.and(
    qb.word("city","Johnstone"),
    qb.word("state","MO")
  ));

const query = qb.where(queryText);

是否可以使用Node API获得cts功能?我宁愿使用Node API而不是在服务器端javascript查询上使用invoke。

1 个答案:

答案 0 :(得分:2)

默认情况下,SJS搜索运行 filtered ,它将删除所有假阳性结果。您可以通过在SJS搜索中添加显式选项来切换该行为:

cts.search(queryText, "unfiltered");

默认情况下,运行unfiltered的Node.js查询,这意味着您可能会遇到假阳性结果。

为了使您的Node.js搜索运行得到过滤,请在查询中添加filtered搜索选项:

const query = qb.where(queryText)
  .withOptions({search:['filtered']});