diff --git a/pom.xml b/pom.xml
index f07ed8723a..f9dc37da05 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-redis
- 3.3.0-SNAPSHOT
+ 3.3.0-GH-2851-SNAPSHOT
Spring Data Redis
Spring Data module for Redis
diff --git a/src/main/antora/modules/ROOT/pages/repositories/projections.adoc b/src/main/antora/modules/ROOT/pages/repositories/projections.adoc
index 875f61abeb..1fae30fda5 100644
--- a/src/main/antora/modules/ROOT/pages/repositories/projections.adoc
+++ b/src/main/antora/modules/ROOT/pages/repositories/projections.adoc
@@ -1,4 +1,4 @@
-[[cassandra.projections]]
+[[redis.projections]]
= Projections
include::{commons}@data-commons::page$repositories/projections.adoc[leveloffset=+1]
diff --git a/src/main/java/org/springframework/data/redis/aot/RedisRuntimeHints.java b/src/main/java/org/springframework/data/redis/aot/RedisRuntimeHints.java
index 963184e293..d5b1224105 100644
--- a/src/main/java/org/springframework/data/redis/aot/RedisRuntimeHints.java
+++ b/src/main/java/org/springframework/data/redis/aot/RedisRuntimeHints.java
@@ -46,6 +46,7 @@
import org.springframework.data.redis.core.index.IndexConfiguration;
import org.springframework.data.redis.core.mapping.RedisMappingContext;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
+import org.springframework.data.redis.repository.query.RedisPartTreeQuery;
import org.springframework.data.redis.repository.query.RedisQueryCreator;
import org.springframework.data.redis.repository.support.RedisRepositoryFactoryBean;
import org.springframework.lang.Nullable;
@@ -106,15 +107,15 @@ public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader)
TypeReference.of(ReactiveClusterScriptingCommands.class),
TypeReference.of(ReactiveClusterGeoCommands.class),
TypeReference.of(ReactiveClusterHyperLogLogCommands.class), TypeReference.of(ReactiveRedisOperations.class),
- TypeReference.of(ReactiveRedisConnectionFactory.class),
- TypeReference.of(ReactiveRedisTemplate.class), TypeReference.of(RedisOperations.class),
- TypeReference.of(RedisTemplate.class), TypeReference.of(StringRedisTemplate.class),
- TypeReference.of(KeyspaceConfiguration.class), TypeReference.of(MappingConfiguration.class),
- TypeReference.of(MappingRedisConverter.class), TypeReference.of(RedisConverter.class),
- TypeReference.of(RedisCustomConversions.class), TypeReference.of(ReferenceResolver.class),
- TypeReference.of(ReferenceResolverImpl.class), TypeReference.of(IndexConfiguration.class),
- TypeReference.of(ConfigurableIndexDefinitionProvider.class), TypeReference.of(RedisMappingContext.class),
- TypeReference.of(RedisRepositoryFactoryBean.class), TypeReference.of(RedisQueryCreator.class),
+ TypeReference.of(ReactiveRedisConnectionFactory.class), TypeReference.of(ReactiveRedisTemplate.class),
+ TypeReference.of(RedisOperations.class), TypeReference.of(RedisTemplate.class),
+ TypeReference.of(StringRedisTemplate.class), TypeReference.of(KeyspaceConfiguration.class),
+ TypeReference.of(MappingConfiguration.class), TypeReference.of(MappingRedisConverter.class),
+ TypeReference.of(RedisConverter.class), TypeReference.of(RedisCustomConversions.class),
+ TypeReference.of(ReferenceResolver.class), TypeReference.of(ReferenceResolverImpl.class),
+ TypeReference.of(IndexConfiguration.class), TypeReference.of(ConfigurableIndexDefinitionProvider.class),
+ TypeReference.of(RedisMappingContext.class), TypeReference.of(RedisRepositoryFactoryBean.class),
+ TypeReference.of(RedisQueryCreator.class), TypeReference.of(RedisPartTreeQuery.class),
TypeReference.of(MessageListener.class), TypeReference.of(RedisMessageListenerContainer.class),
TypeReference
diff --git a/src/main/java/org/springframework/data/redis/core/RedisQueryEngine.java b/src/main/java/org/springframework/data/redis/core/RedisQueryEngine.java
index 9ae0612e38..c3d8a37f64 100644
--- a/src/main/java/org/springframework/data/redis/core/RedisQueryEngine.java
+++ b/src/main/java/org/springframework/data/redis/core/RedisQueryEngine.java
@@ -33,18 +33,20 @@
import org.springframework.data.keyvalue.core.SortAccessor;
import org.springframework.data.keyvalue.core.SpelSortAccessor;
import org.springframework.data.keyvalue.core.query.KeyValueQuery;
+import org.springframework.data.mapping.PersistentPropertyPath;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisGeoCommands.GeoLocation;
import org.springframework.data.redis.connection.RedisGeoCommands.GeoRadiusCommandArgs;
import org.springframework.data.redis.connection.util.ByteArrayWrapper;
import org.springframework.data.redis.core.convert.GeoIndexedPropertyValue;
+import org.springframework.data.redis.core.convert.RedisConverter;
import org.springframework.data.redis.core.convert.RedisData;
+import org.springframework.data.redis.core.mapping.RedisPersistentProperty;
import org.springframework.data.redis.repository.query.RedisOperationChain;
import org.springframework.data.redis.repository.query.RedisOperationChain.NearPath;
import org.springframework.data.redis.repository.query.RedisOperationChain.PathAndValue;
import org.springframework.data.redis.util.ByteUtils;
import org.springframework.expression.spel.standard.SpelExpressionParser;
-import org.springframework.lang.NonNullApi;
import org.springframework.lang.Nullable;
import org.springframework.util.CollectionUtils;
@@ -100,7 +102,7 @@ private List doFind(RedisOperationChain criteria, long offset, int rows,
RedisCallback