【问题标题】:MarkLogic- How to use andNot in structuredQueryBuilderMarkLogic-如何在结构化查询构建器中使用andNot
【发布时间】:2023-03-14 21:37:01
【问题描述】:

{“uuid”:121222151,“路径”:“/aaa/bbb/ccc.json”,“名称”:“newDoc1”, “uuid”:121222152,“路径”:“/aaa/ddd.json”,“名称”:“newDoc1”}

我正在使用 StructuredQueryBuilder 搜索结果。

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/*”的路径中。上面的代码不起作用。可能是什么原因?

【问题讨论】:

    标签: marklogic marklogic-8 marklogic-7


    【解决方案1】:

    您的示例 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));
    

    我现在不能完全测试这个,但希望这能让你朝着正确的方向前进。

    【讨论】:

      【解决方案2】:

      您是否为路径属性打开了通配符索引?如果没有,您可能希望在 path 属性上创建一个字段并仅为该字段打开通配符索引。

      要了解通配符搜索,请参阅:

      http://docs.marklogic.com/guide/search-dev/wildcard

      如果您只需要该 JSON 属性的通配符,则为特定字段启用通配符是有意义的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多