diff --git a/services/thingsearch/persistence/src/main/java/org/eclipse/ditto/services/thingsearch/persistence/Indices.java b/services/thingsearch/persistence/src/main/java/org/eclipse/ditto/services/thingsearch/persistence/Indices.java index 4790911c75..913ad5b45f 100644 --- a/services/thingsearch/persistence/src/main/java/org/eclipse/ditto/services/thingsearch/persistence/Indices.java +++ b/services/thingsearch/persistence/src/main/java/org/eclipse/ditto/services/thingsearch/persistence/Indices.java @@ -18,12 +18,16 @@ import static org.eclipse.ditto.services.thingsearch.persistence.PersistenceConstants.FIELD_NAMESPACE; import static org.eclipse.ditto.services.thingsearch.persistence.PersistenceConstants.FIELD_PATH_KEY; import static org.eclipse.ditto.services.thingsearch.persistence.PersistenceConstants.FIELD_PATH_VALUE; +import static org.eclipse.ditto.services.thingsearch.persistence.PersistenceConstants.FIELD_POLICY_ID; +import static org.eclipse.ditto.services.thingsearch.persistence.PersistenceConstants.FIELD_POLICY_REVISION; import static org.eclipse.ditto.services.thingsearch.persistence.read.MongoThingsSearchPersistence.filterNotDeleted; import java.util.Arrays; import java.util.Collections; import java.util.List; +import org.bson.BsonBoolean; +import org.bson.BsonDocument; import org.eclipse.ditto.services.utils.persistence.mongo.indices.Index; import org.eclipse.ditto.services.utils.persistence.mongo.indices.IndexFactory; @@ -56,13 +60,17 @@ public static final class Things { private static final Index DELETED = IndexFactory.newInstance("deleted", keys(FIELD_DELETED), false); + private static final Index POLICY = IndexFactory.newInstance("policy", + keys(FIELD_POLICY_ID, FIELD_POLICY_REVISION), false) + .withPartialFilterExpression(filterPolicyIdExists()); + /** * Gets all defined indices. * * @return the indices */ public static List all() { - return Collections.unmodifiableList(Arrays.asList(KEY_VALUE, ACL, GLOBAL_READS, DELETED)); + return Collections.unmodifiableList(Arrays.asList(KEY_VALUE, ACL, GLOBAL_READS, DELETED, POLICY)); } private static List keys(final String... keyNames) { @@ -72,6 +80,16 @@ private static List keys(final String... keyNames) { private Things() { throw new AssertionError(); } + + /** + * Create a BSON filter for existent policyId. + * + * @return the BSON filter. + */ + private static BsonDocument filterPolicyIdExists() { + return new BsonDocument(FIELD_POLICY_ID, new BsonDocument("$exists", BsonBoolean.TRUE)); + } + } }