From ce03f5bd9c66b91aba1c70784b5127a2672d8aa7 Mon Sep 17 00:00:00 2001 From: Brian Sam-Bodden Date: Fri, 14 Feb 2025 18:00:29 -0700 Subject: [PATCH] fix: @Document(indexName=) not working in conjunction with @IndexingOptions (resolves gh-540) --- .../om/spring/indexing/RediSearchIndexer.java | 3 +-- .../BasicRedisDocumentMappingTest.java | 21 ++++++++++++++- .../document/model/CustomIndex2Doc.java | 27 +++++++++++++++++++ .../document/model/CustomIndexDoc.java | 4 ++- .../repository/CustomIndex2DocRepository.java | 8 ++++++ 5 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 redis-om-spring/src/test/java/com/redis/om/spring/fixtures/document/model/CustomIndex2Doc.java create mode 100644 redis-om-spring/src/test/java/com/redis/om/spring/fixtures/document/repository/CustomIndex2DocRepository.java diff --git a/redis-om-spring/src/main/java/com/redis/om/spring/indexing/RediSearchIndexer.java b/redis-om-spring/src/main/java/com/redis/om/spring/indexing/RediSearchIndexer.java index 779ae9fb..4cc8cf8a 100644 --- a/redis-om-spring/src/main/java/com/redis/om/spring/indexing/RediSearchIndexer.java +++ b/redis-om-spring/src/main/java/com/redis/om/spring/indexing/RediSearchIndexer.java @@ -109,9 +109,8 @@ public void createIndexFor(Class cl) { // IndexingOptions overrides Document# if (maybeIndexingOptions.isPresent()) { indexName = maybeIndexingOptions.get().indexName(); - } else { - indexName = document.get().indexName(); } + indexName = indexName.isBlank() ? document.get().indexName() : indexName; indexName = indexName.isBlank() ? cl.getName() + "Idx" : indexName; } else { if (maybeIndexingOptions.isPresent()) { diff --git a/redis-om-spring/src/test/java/com/redis/om/spring/annotations/document/BasicRedisDocumentMappingTest.java b/redis-om-spring/src/test/java/com/redis/om/spring/annotations/document/BasicRedisDocumentMappingTest.java index 0d1c81ce..4a0873a6 100644 --- a/redis-om-spring/src/test/java/com/redis/om/spring/annotations/document/BasicRedisDocumentMappingTest.java +++ b/redis-om-spring/src/test/java/com/redis/om/spring/annotations/document/BasicRedisDocumentMappingTest.java @@ -55,6 +55,9 @@ class BasicRedisDocumentMappingTest extends AbstractBaseDocumentTest { @Autowired CustomIndexDocRepository customIndexDocRepository; + @Autowired + CustomIndex2DocRepository customIndex2DocRepository; + @Autowired TypeKitchenSinkRepository typeKitchenSinkRepository; @@ -823,7 +826,23 @@ void testFindAllWithSortingByIdUsingMetamodel() { void testCustomIndexName() { // CustomIndexDoc has a custom index name defined in the @Document annotation var indices = jedis.ftList(); - assertThat(indices).contains("MyCustomIndex"); + assertThat(indices).contains("MyCustomDocIndex"); + } + + @Test + void testCustomIndexAndCustomPrefixWithIndexingOptions() { + CustomIndex2Doc cih2 = customIndex2DocRepository.save(CustomIndex2Doc.of("AAA", "BBB")); + String key = customIndex2DocRepository.getKeyFor(cih2); // prefix should be `cp2` + assertThat(key).startsWith("cp2:"); + var indices = jedis.ftList(); + assertThat(indices).contains("ci2"); + } + + @Test + void testCustomIndexAndCustomPrefix() { + CustomIndexDoc cih = customIndexDocRepository.save(CustomIndexDoc.of("AAA", "BBB")); + String key = customIndexDocRepository.getKeyFor(cih); // prefix should be `MyCustomPrefix` + assertThat(key).startsWith("MyCustomPrefix:"); } //customIndexDocRepository diff --git a/redis-om-spring/src/test/java/com/redis/om/spring/fixtures/document/model/CustomIndex2Doc.java b/redis-om-spring/src/test/java/com/redis/om/spring/fixtures/document/model/CustomIndex2Doc.java new file mode 100644 index 00000000..1f904fa5 --- /dev/null +++ b/redis-om-spring/src/test/java/com/redis/om/spring/fixtures/document/model/CustomIndex2Doc.java @@ -0,0 +1,27 @@ +package com.redis.om.spring.fixtures.document.model; + +import com.redis.om.spring.annotations.Document; +import com.redis.om.spring.annotations.IndexCreationMode; +import com.redis.om.spring.annotations.IndexingOptions; +import com.redis.om.spring.annotations.Searchable; +import lombok.*; +import org.springframework.data.annotation.Id; + +@Data +@RequiredArgsConstructor(staticName = "of") +@AllArgsConstructor(access = AccessLevel.PROTECTED) +@NoArgsConstructor(force = true) +@IndexingOptions(indexName = "ci2", creationMode = IndexCreationMode.SKIP_IF_EXIST) +@Document(value = "cp2") +public class CustomIndex2Doc { + @Id + private String id; + + @NonNull + @Searchable(sortable = true) + private String first; + + @NonNull + @Searchable(sortable = true) + private String second; +} diff --git a/redis-om-spring/src/test/java/com/redis/om/spring/fixtures/document/model/CustomIndexDoc.java b/redis-om-spring/src/test/java/com/redis/om/spring/fixtures/document/model/CustomIndexDoc.java index 4f93d3f4..c46833aa 100644 --- a/redis-om-spring/src/test/java/com/redis/om/spring/fixtures/document/model/CustomIndexDoc.java +++ b/redis-om-spring/src/test/java/com/redis/om/spring/fixtures/document/model/CustomIndexDoc.java @@ -1,6 +1,7 @@ package com.redis.om.spring.fixtures.document.model; import com.redis.om.spring.annotations.Document; +import com.redis.om.spring.annotations.IndexingOptions; import com.redis.om.spring.annotations.Searchable; import lombok.*; import org.springframework.data.annotation.Id; @@ -9,7 +10,8 @@ @RequiredArgsConstructor(staticName = "of") @AllArgsConstructor(access = AccessLevel.PROTECTED) @NoArgsConstructor(force = true) -@Document(indexName = "MyCustomIndex") +@IndexingOptions(indexName = "MyCustomDocIndex") +@Document(value = "MyCustomPrefix") public class CustomIndexDoc { @Id private String id; diff --git a/redis-om-spring/src/test/java/com/redis/om/spring/fixtures/document/repository/CustomIndex2DocRepository.java b/redis-om-spring/src/test/java/com/redis/om/spring/fixtures/document/repository/CustomIndex2DocRepository.java new file mode 100644 index 00000000..cfca525f --- /dev/null +++ b/redis-om-spring/src/test/java/com/redis/om/spring/fixtures/document/repository/CustomIndex2DocRepository.java @@ -0,0 +1,8 @@ +package com.redis.om.spring.fixtures.document.repository; + +import com.redis.om.spring.fixtures.document.model.CustomIndex2Doc; +import com.redis.om.spring.repository.RedisDocumentRepository; + +@SuppressWarnings("unused") +public interface CustomIndex2DocRepository extends RedisDocumentRepository { +}