@Override public Observable<Boolean> createN1qlIndex(final String indexName, List<Object> fields, Expression whereClause, final boolean ignoreIfExist, boolean defer) { if (fields == null || fields.isEmpty()) { throw new IllegalArgumentException("At least one field is required for secondary index"); } int i = -1; Expression firstExpression = expressionOrIdentifier(fields.get(0)); Expression[] otherExpressions = new Expression[fields.size() - 1]; for (Object field : fields) { if (i > -1) { otherExpressions[i] = expressionOrIdentifier(field); } //otherwise skip first expression, already processed i++; } Statement createIndex; UsingWithPath usingWithPath; if (whereClause != null) { usingWithPath = Index.createIndex(indexName).on(bucket, firstExpression, otherExpressions).where(whereClause); } else { usingWithPath = Index.createIndex(indexName).on(bucket, firstExpression, otherExpressions); } if (defer) { createIndex = usingWithPath.withDefer(); } else { createIndex = usingWithPath; } return queryExecutor.execute(N1qlQuery.simple(createIndex), env, env.managementTimeout(), TimeUnit.MILLISECONDS) .compose(checkIndexCreation(ignoreIfExist, "Error creating secondary index " + indexName)); }
final String type = metadata.getDomainType().getName(); Statement createIndex = Index.createIndex(indexName) .on(bucketName, x(typeKey)) .where(x(typeKey).eq(s(type)))
final String type = metadata.getDomainType().getName(); Statement createIndex = Index.createIndex(indexName) .on(bucketName, x(typeKey)) .where(x(typeKey).eq(s(type)))