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
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));
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.
I can't use persisted query as parameters for sort, facets & filters are based on webservice request parameters.
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?
Thanks