已创建以下元素范围索引: 标量类型:unsignedLong,本地名称:数字,
我正在运行以下代码:
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 服务器 7.0、client-api-java 2.0.5。
谢谢赫利布
更新
我在另一台机器上运行类似的代码,它工作正常。现在尝试找出差异
最佳答案
该代码运行的环境是否可能正在运行 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。
希望有帮助,
关于java - 在 MarkLogic 中使用客户端 Java API 进行范围结构化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32619777/