我想使用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访问属性?
谢谢。
答案 0 :(得分:1)
该错误表明cts.query的JSON序列化无效。
找出正确序列化的一种方法是在QueryConsole中工作:
/* 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
错误。
希望有帮助,