来自 java 客户端 api 的 Cts 查询未提供正确的搜索结果

问题描述 投票:0回答:1

我正在尝试从我的应用程序中执行以下代码。但它没有给我正确的结果。我不确定我是否在代码中使用了正确的句柄和查询定义。有人可以帮我解决这个问题吗?

QueryManager queryManager = queryManager(ClientRole.GT_CONTRIBUTOR);
JSONDocumentManager docMgr = jsonDocumentManager(ClientRole.GT_CONTRIBUTOR);
CtsQueryBuilder ctsQueryBuilder = queryManager.newCtsSearchBuilder();
CtsQueryExpr ctsQueryExpr =
    ctsQueryBuilder.cts.pathRangeQuery(
        "/id",
        "=",
        "141433");
CtsQueryDefinition ctsQueryDefinition = ctsQueryBuilder.newCtsQueryDefinition(ctsQueryExpr);
JacksonHandle jacksonHandle = new JacksonHandle();
RawCombinedQueryDefinition rawQueryDef =
    queryManager.newRawCombinedQueryDefinition(new StringHandle( ctsQueryDefinition.serialize()).withFormat(Format.JSON));    rawQueryDef.setCollections(GuestTrackerConstants.SEGMENT_COLLECTION);
docMgr.setPageLength(1000);
DocumentPage docPage = docMgr.search(rawQueryDef, 1, jacksonHandle);
marklogic marklogic-9
1个回答
1
投票

我认为您会发现 StructuredQueryBuilder 更易于使用 - 尝试这样的事情:

QueryManager mgr = client.newQueryManager();
StructuredQueryBuilder queryBuilder = mgr.newStructuredQueryBuilder();
StructuredQueryBuilder.PathIndex index = queryBuilder.pathIndex("/properties/OBJECTID");
StructuredQueryDefinition query = queryBuilder.range(index, "xs:string", StructuredQueryBuilder.Operator.EQ, "11003");
JsonNode results = mgr.search(query, new JacksonHandle()).get();
System.out.println(results.toPrettyString());

您也可以通过 query.setCollections 轻松添加集合。

已编辑 - 您提到您需要使用 CtsQueryExpr。这是让它工作的一个例子:

QueryManager queryManager = client.newQueryManager();
CtsQueryBuilder queryBuilder = queryManager.newCtsSearchBuilder();
CtsQueryExpr expr = queryBuilder.cts.pathRangeQuery("/properties/OBJECTID", "=", "11003");
CtsQueryDefinition queryDef = queryBuilder.newCtsQueryDefinition(expr);
JsonNode response = queryManager.search(queryDef, new JacksonHandle()).get();
System.out.println(response.toPrettyString());

注意 JacksonHandle 会给你一个 JsonNode。如果你只需要一个字符串,你可以使用 StringHandle。您还可以使用 SearchHandle 获取一系列方法来访问搜索响应中的数据。

© www.soinside.com 2019 - 2024. All rights reserved.