创建了以下元素范围索引: 标量类型:unsignedLong, localname :数字,
我正在运行以下代码:
String options =
"<search:options " +
"xmlns:search='http://marklogic.com/appservices/search'>" +
"<search:constraint name='number'>" +
"<search:range type='xs:unsignedLong'>" +
"<search:element name='number' ns=''/>" +
"</search:range>" +
"</search:constraint>" +
"</search:options>";
databaseClient.newServerConfigManager()
.newQueryOptionsManager().writeOptions("myopt", new StringHandle(options));
JSONDocumentManager jsonDocumentManager =
databaseClient.newJSONDocumentManager();
for (int i = 0; i < 10; i++) {
jsonDocumentManager.write("/somepath/"+ i +".json",
new StringHandle("{\"number\": \""+i+"\"}"));
}
QueryDefinition queryDefinition = new StructuredQueryBuilder()
.rangeConstraint("number", StructuredQueryBuilder.Operator.GT, "5");
queryDefinition.setOptionsName("myopt");
StringHandle searchHandle = databaseClient.newQueryManager()
.search(queryDefinition, new StringHandle());
System.out.println(searchHandle.get());
我希望得到数字大于5的文档,但我的搜索结果是空的。也许我错过了什么?
我正在使用MarkLogic server 7.0,client-api-java 2.0.5。
谢谢,Hlib
更新
我在另一台机器上运行类似的代码,它运行正常。试图找出差异
答案 0 :(得分:1)
该代码工作的环境是否可能正在运行MarkLogic 8?
在MarkLogic 7上,JSON在特殊命名空间中作为XML持久化。您可以使用该命名空间定义范围索引:
http://docs.marklogic.com/7.0/guide/rest-dev/search#id_95526
然后,使用json-key而不是element指定范围约束:
<search:json-key>number</search:json-key>
在MarkLogic 8中,JSON持久化为JSON,因此您不必使用命名空间定义索引,而是使用json-property而不是json-key。
希望有帮助,