Marklogic 通过客户端javaapi的动态选项
我正在创建RESTWebService,它通过url获取参数,并基于这些动态参数在marklogic中搜索 q=搜索和偏移=0&限制=10&排序=文档ID | asc&术语聚合=组:10 我正在使用StructuredQueryDefinition和RawCombinedQueryDefinition创建:Marklogic 通过客户端javaapi的动态选项,marklogic,marklogic-8,Marklogic,Marklogic 8,我正在创建RESTWebService,它通过url获取参数,并基于这些动态参数在marklogic中搜索 q=搜索和偏移=0&限制=10&排序=文档ID | asc&术语聚合=组:10 我正在使用StructuredQueryDefinition和RawCombinedQueryDefinition创建: StructuredQueryDefinition queryCriteria = sqb.or(query, sqb.properties(sqb.term(parameters.getQ
StructuredQueryDefinition queryCriteria = sqb.or(query, sqb.properties(sqb.term(parameters.getQuery))));
String combinedQuery = "<search xmlns=\"http://marklogic.com/appservices/search\">" + queryCriteria.serialize() + options + "</search>";
RawCombinedQueryDefinition rawCombinedQuery = queryMgr.newRawCombinedQueryDefinition( new StringHandle(combinedQuery));
StructuredQueryDefinition queryCriteria=sqb.or(query,sqb.properties(sqb.term(parameters.getQuery)));
String combinedQuery=“”+queryCriteria.serialize()+options+”;
RawCombinedQueryDefinition rawCombinedQuery=queryMgr.newRawCombinedQueryDefinition(新StringHandle(combinedQuery));
为了创建带有选项的查询,我将使用字符串/字符串缓冲区,如用于选项提取文档数据
extractedDataOption.append("<extract-document-data selected=\"include\">")
Loop through each field
{ extractedDataOption.append("<extract-path ");
extractedDataOption.append(" xmlns:");
extractedDataOption.append(field_attributes.get("namespace"));
extractedDataOption.append(" >//");
extractedDataOption.append(field_attributes.get("fieldname"));
extractedDataOption.append(" </extract-path>");
}
extractedDataOption.append("</extract-document-data>");
extractedDataOption.append(“”)
循环遍历每个字段
{extractedDataOption.append(“/”);
extractedDataOption.append(field_attributes.get(“fieldname”));
extractedDataOption.append(“”);
}
extractedDataOption.append(“”);
与排序、面、过滤器约束类似
我不能使用持久化查询作为排序参数,facets和过滤器基于webservice请求参数
此外,我看到QueryOptionsBuilder和其他类似的类被弃用
有人能告诉我,动态创建这些不同选项而不是字符串的最佳方法是什么
谢谢当您的选项非常简单或静态时,字符串可以很好地工作。但是,如果您正在构建一个复杂或动态的XML结构,我认为您应该寻找一些不太可能意外生成格式错误的XML的东西。Java的XMLBuilder库非常流行,Java客户机API直接支持几个好的库:、、和。选择你最喜欢的 还有一些XML构建器创建InputStream或String,因此可以使用或来支持它们 下面是一个使用XMLStreamWriter构建选项XML,然后将其序列化为字符串(由中的片段组合而成)的示例
ByteArrayOutputStream baos = new ByteArrayOutputStream();
XMLOutputFactory factory = XMLOutputFactory.newInstance();
factory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true);
XMLStreamWriter writer = factory.createXMLStreamWriter(out, "UTF-8");
writer.setDefaultNamespace("http://marklogic.com/appservices/search");
writer.writeStartElement("options");
writer.writeStartElement("search-option");
writer.writeCharacters("filtered");
writer.writeEndElement();
writer.writeEndElement();
return baos.toString("UTF-8");