使用REST API搜索来搜索文档的元数据属性(最后修改)

时间:2020-05-21 19:10:24

标签: marklogic marklogic-9

我想使用REST API搜索来搜索“最后修改”的元数据属性。我有在查询控制台中工作的等效cts搜索。

qconsole中的CTS查询正在工作-

  cts.search(cts.andQuery([
 cts.propertiesFragmentQuery(
    cts.elementRangeQuery(
        xs.QName('prop:last-modified'),'>',
        "2020-04-07T10:22:55-05:00"))
        ]))

这是我正在执行的REST API搜索结构化查询。

http://localhost:xxxx/v1/search?format=json&pageLength=2000&start=1

{
    "search": {
        "ctsquery": {
            "andQuery": {
                "queries": [
                    {
                        "propertiesFragmentQuery": {
                            "elementRangeQuery": {
                                "property": [
                                    "xsQName('prop:last-modified')"
                                ],
                                "operator": ">",
                                "value": [
                                    {
                                        "type": "dateTime",
                                        "val": "2020-04-07T10:22:55-05:00"
                                    }
                                ]
                            }
                        }
                    }
                ]
            }
        }
    }
}

我得到以下

错误“ statusCode”:500, “ status”:“内部服务器错误”, “ messageCode”:“内部错误”, “ message”:“ XDMP-QUERYNODE:cts:query(object-node {\” andQuery \“:object-node {\” queries \“:array-node {object-node {\” propertiesFragmentQuery \“:object-node {...}}}}})–查询元素object-node {\“ elementRangeQuery \”:object-node {...}}包含未知子项。有关更多详细信息,请参阅MarkLogic服务器错误日志。 >

查询中是否缺少某些内容,或者是否有其他方法可以从REST API访问属性?

谢谢。

1 个答案:

答案 0 :(得分:1)

该错误表明cts.query的JSON序列化无效。

找出正确序列化的一种方法是在QueryConsole中工作:

  1. 编写一个cts.search()返回cts.query()的预期结果
  2. 在xdmp.toJSON()中包装cts.query()以为cts.query生成序列化对象
  3. 使用序列化的对象作为有效负载中/* JInternalFrameTest.java * Copyright (c) HerongYang.com. All Rights Reserved. */ import java.awt.*; import javax.swing.*; public class JInternalFrameTest { public static void main(String[] a) { JFrame myFrame = new JFrame("Internal Frames"); myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); myFrame.setSize(300,300); JDesktopPane myDesktop = new JDesktopPane(); myFrame.setContentPane(myDesktop); JInternalFrame f = createFrame("Frame 1"); f.setLocation(10,10); myDesktop.add(f); f = createFrame("Frame 2"); f.setLocation(60,60); myDesktop.add(f); myFrame.setVisible(true); } private static JInternalFrame createFrame(String t) { JInternalFrame f = new JInternalFrame(t); f.setResizable(true); f.setClosable(true); f.setMaximizable(true); f.setIconifiable(true); f.setSize(200,200); f.setVisible(true); return f; } } 键的值

应该克服了ctsquery错误。

希望有帮助,

相关问题