如何以 json 格式向 StructuredQueryDefinition 添加选项

How to add options to StructuredQueryDefinition in json format

我是 marklogic 的新手,想在 json 中创建 marklogic 查询。

我使用 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));

我可以使用 StructuredQueryDefinition 在 json 中创建查询吗?如果可以,我如何为 json 添加选项?

谢谢

您不能使用 StructuredQueryDefinition 在 json 中创建查询。但是,您可以使用流行的 XML 构建器来构建您的 XML 选项,这样您就不必管理原始 XML。或者,如果您真的喜欢 JSON 中的选项,您可以使用 Jackson 在 JSON 中生成结构化查询,然后组合您的 json 选项。

像这样:

ObjectMapper mapper = new ObjectMapper();
ObjectNode combinedQuery = mapper.createObjectNode();
combinedQuery.putObject("search")
  .putObject("query")
    .putArray("queries")
      .addObject()
        .putObject("or-query")
          .putArray("queries")
            .add(mapper.readTree(query))
            .addObject()
              .putObject("properties-fragment-query")
                .putObject("term-query")
                  .putArray("text")
                    .add(parameters.getQuery());
combinedQuery.with("search")
  .setAll((ObjectNode) mapper.readTree(options));
queryMgr.newRawCombinedQueryDefinition( new JacksonHandle(combinedQuery));

为了后人,我相信这个问题与有关。也许我对那个问题的回答中的某些内容也会对这个问题有所帮助。