创建了以下元素范围索引:标量类型: unsignedLong, localname: number,
我正在运行以下代码:
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
我在另一台机器上运行类似的代码,它工作正常。
该代码工作的环境是否可能运行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。
希望有帮助,