MarkLogic-如何在structuredQueryBuilder中使用AND而不是
{“uuid”:121222151,“路径”:“/aaa/bbb/ccc.json”,“名称”:“newDoc1”, “uuid”:121222152,“路径”:“/aaa/ddd.json”,“名称”:“newDoc1”} 我正在使用StructuredQueryBuilder搜索结果MarkLogic-如何在structuredQueryBuilder中使用AND而不是,marklogic,marklogic-8,marklogic-7,Marklogic,Marklogic 8,Marklogic 7,{“uuid”:121222151,“路径”:“/aaa/bbb/ccc.json”,“名称”:“newDoc1”, “uuid”:121222152,“路径”:“/aaa/ddd.json”,“名称”:“newDoc1”} 我正在使用StructuredQueryBuilder搜索结果 StructuredQueryBuilder queryBuilder = new StructuredQueryBuilder(); StructuredQueryDefinition containPosi
StructuredQueryBuilder queryBuilder = new StructuredQueryBuilder();
StructuredQueryDefinition containPositiveQuery = queryBuilder.containerQuery(queryBuilder.jsonProperty("name"), queryBuilder.term("newDoc1"));
StructuredQueryDefinition containNegativeQuery = queryBuilder.containerQuery(queryBuilder.jsonProperty("path"), queryBuilder.term("*/bbb/*"));
StructuredQueryDefinition containQuery = qb.andNot(containPositiveQuery, containNegativeQuery);
我希望结果搜索名称“newDoc1”,但不搜索包含“*/bbb/*”的路径。上述代码不起作用。原因可能是什么?您的示例JSON文档是扁平的。没有嵌套对象。因此,没有可查询的容器。为了实现您的目标,我猜您的文档需要看起来更像这样:
{ "container": {
"uuid": 121222151,
"path": "/aaa/bbb/ccc.json",
"name": "newDoc1"
},
"container": {
"uuid": 121222152,
"path": "/aaa/ddd.json",
"name": "newDoc1"
}
}
StructuredQueryBuilder queryBuilder = new StructuredQueryBuilder();
StructuredQueryDefinition positiveQuery = queryBuilder.term("newDoc1");
StructuredQueryDefinition negativeQuery = queryBuilder.term("*/bbb/*");
StructuredQueryDefinition containQuery =
queryBuilder.containerQuery(queryBuilder.jsonProperty("container"),
qb.andNot(positiveQuery, negativeQuery));
您的查询更像这样:
{ "container": {
"uuid": 121222151,
"path": "/aaa/bbb/ccc.json",
"name": "newDoc1"
},
"container": {
"uuid": 121222152,
"path": "/aaa/ddd.json",
"name": "newDoc1"
}
}
StructuredQueryBuilder queryBuilder = new StructuredQueryBuilder();
StructuredQueryDefinition positiveQuery = queryBuilder.term("newDoc1");
StructuredQueryDefinition negativeQuery = queryBuilder.term("*/bbb/*");
StructuredQueryDefinition containQuery =
queryBuilder.containerQuery(queryBuilder.jsonProperty("container"),
qb.andNot(positiveQuery, negativeQuery));
我现在无法完全测试这一点,但希望这能让您朝着正确的方向前进。您为path属性启用了通配符索引了吗?如果没有,您可能希望在path属性上创建一个字段,并仅为该字段启用通配符索引 要了解通配符搜索,请参阅: 如果您只需要该JSON属性的通配符,那么为特定字段启用通配符是有意义的