要执行与 Web 或 Eclipse 客户机中的高级搜索类似的搜索,您可以使用方法 RAMAssetQueryBuilder.addQueryField(java.lang.String, java.lang.String) 向 RAMAssetQueryBuilder 添加查询字段。最近一次修改日期、GUID、描述、资产名称、评级、所有者、状态和版本都有对应的字段。缺省情况下,所有查询字段都是用“and”运算符逻辑地连接在一起的(仅返回与所有查询字段相匹配的搜索结果)。例如,要查找名称为 Rational Asset Manager Client API Javadoc 并且版本为 7.1 的资产,请执行以下搜索。
// Search exclusive
queryBuilder = new RAMAssetQueryBuilder(session);
queryBuilder.addQueryField(queryBuilder.QUERY_FIELD_NAME, "Rational Asset Manager Client API Javadoc");
queryBuilder.addQueryField(queryBuilder.QUERY_FIELD_VERSION, "7.1");
searchResult = session.getAssets(queryBuilder);
要更改字段处理方式,可使用 RAMQueryBuilder.setMatchAnyField(boolean) 方法,它会使用 OR 运算符将这些字段连接在一起。例如,要查找版本为 7.0、7.0.0.2 或 7.1 的资产,请执行以下搜索:
//Search Inclusive
queryBuilder = new RAMAssetQueryBuilder(session);
queryBuilder.addQueryField(queryBuilder.QUERY_FIELD_VERSION, "7.0");
queryBuilder.addQueryField(queryBuilder.QUERY_FIELD_VERSION, "7.0.0.2");
queryBuilder.addQueryField(queryBuilder.QUERY_FIELD_VERSION, "7.1");
queryBuilder.setMatchAnyField(true);
searchResult = session.getAssets(queryBuilder);
除了名称和值查询字段,还可创建文本查询字段,通过使用 RAMAssetQueryBuilder.addQueryTextField(java.lang.String) 方法,可使用“and”或“or”运算符将这些文本查询字段与其他查询字段连接在一起。
//Search API with wildcard
queryBuilder = new RAMAssetQueryBuilder(session);
queryBuilder.addQueryTextField("API*");
queryBuilder.addQueryField(queryBuilder.QUERY_FIELD_VERSION, "7.1");
searchResult = session.getAssets(queryBuilder);
AND_OPERATOR 和 OR_OPERATOR 运算符可用于将更复杂的查询连接到一起。例如,要创建查询来查找包含名称 API 并且版本为 7.0、7.0.0.2 或 7.1 的资产,请运行以下代码:
//Advanced Query
nonEscapedNameQuery = queryBuilder.createQueryFieldText(
queryBuilder.QUERY_FIELD_NAME, "API*");
queryBuilder.addQueryTextField(nonEscapedNameQuery);
String version71 = queryBuilder.createQueryFieldText(queryBuilder.QUERY_FIELD_VERSION, "7.0");
String version7002 = queryBuilder.createQueryFieldText(queryBuilder.QUERY_FIELD_VERSION, "7.0.0.2");
String version71 = queryBuilder.createQueryFieldText(queryBuilder.QUERY_FIELD_VERSION, "7.1");
String versionQuery = version70 + RAMAssetQueryBuilder.OR_OPERATOR + version7002 + RAMAssetQueryBuilder.OR_OPERATOR + version71;
queryBuilder.addQueryTextField(versionQuery);
searchResult = session.getAssets(queryBuilder);