我正在尝试从我的应用程序中执行以下代码。但它没有给我正确的结果。我不确定我是否在代码中使用了正确的句柄和查询定义。有人可以帮我解决这个问题吗?
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);
我认为您会发现 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 获取一系列方法来访问搜索响应中的数据。