通过client-java-api的动态选项 [英] Dynamic options via client-java-api

查看:93
本文介绍了通过client-java-api的动态选项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在创建REST Web服务,该服务通过url获取参数并基于这些动态参数在marklogic中进行搜索.

I am creating REST webservice that take parameters via url and search in marklogic based on these dynamic parameters.

q = search& offset = 0& limit = 10& sort = documentId | asc& termAggregations = group:10

q=search&offset=0&limit=10& sort=documentId|asc&termAggregations=group:10

我正在使用StructuredQueryDefinition& RawCombinedQueryDefinition:

I am creating using StructuredQueryDefinition & RawCombinedQueryDefinition :

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));

要使用选项创建查询,我正在使用String/String Buffer,如选项extract-document-data

For creating query with options, I am using String /String Buffer like for option extract-document-data

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>");

类似于排序,构面,过滤器约束.

Similarly for sort, facets, filters constraints.

我不能将持久化查询用作排序,构面和&的参数过滤器基于Web服务请求参数.

I can't use persisted query as parameters for sort, facets & filters are based on webservice request parameters.

此外,我看到QueryOptionsBuilder和其他类似的类也已弃用.

Also, I see QueryOptionsBuilder and other similar classes are deprecated.

有人可以让我动态地创建这些不同选项而不是字符串的最佳方法是什么吗?

Can someone please let me what would be best way to create these different options dynamically instead of string?

谢谢

推荐答案

当您的选项非常简单或静态时,字符串可以正常工作.但是,如果您要构建一个复杂的或动态的XML结构,我认为寻找一些不太可能意外生成格式错误的XML的方法是明智的. Java的XML构建器库很普遍,并且Java Client API直接支持几个好的构建器库: DOM4J XOM DOM

Strings work fine when your options are very simple or static. But if you're building a complex or dynamic XML structure I think you're wise to seek something less likely to accidentally produce mal-formed XML. XML builder libraries for Java are prevalent and several good ones are directly supported by the Java Client API: Jackson, JDOM, DOM4J, XOM, DOM, and JAXB. Pick your favorite.

此外,还有一些XML构建器可以创建InputStream或String,因此可以使用 InputStreamHandle .

Also, there are XML Builders that create an InputStream or String and can thus be supported using StringHandle or InputStreamHandle.

这里是一个使用XMLStreamWriter生成选项XML然后将其序列化为字符串的示例(从

Here's an example of using XMLStreamWriter to build options XML then serialize it to a string (cobled from pieces in CombinedQueryBuilderTest.java).

    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");

这篇关于通过client-java-api的动态选项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆