Skip to content

Commit ecd01b7

Browse files
committed
refactor: move serialization hints to its own property
1 parent b279fdd commit ecd01b7

File tree

7 files changed

+25
-15
lines changed

7 files changed

+25
-15
lines changed

redis-om-spring/src/main/java/com/redis/om/spring/RediSearchIndexer.java

+12-8
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import com.redis.om.spring.ops.RedisModulesOperations;
77
import com.redis.om.spring.ops.search.SearchOperations;
88
import com.redis.om.spring.repository.query.QueryUtils;
9-
import com.redis.om.spring.serialization.gson.EnumTypeAdapter;
9+
import com.redis.om.spring.serialization.gson.*;
1010
import org.apache.commons.lang3.ObjectUtils;
1111
import org.apache.commons.logging.Log;
1212
import org.apache.commons.logging.LogFactory;
@@ -213,10 +213,19 @@ private List<Field> findIndexFields(java.lang.reflect.Field field, String prefix
213213
//
214214
// Any Character class, Boolean or Enum with AUTODETECT -> Tag Search Field
215215
//
216-
if (CharSequence.class.isAssignableFrom(fieldType) || (fieldType == Boolean.class) ||
217-
(fieldType.isEnum())) {
216+
if (CharSequence.class.isAssignableFrom(fieldType) || (fieldType == Boolean.class)) {
218217
fields.add(indexAsTagFieldFor(field, isDocument, prefix, indexed.sortable(), indexed.separator(),
219218
indexed.arrayIndex(), indexed.alias()));
219+
} else if (fieldType.isEnum()) {
220+
switch (indexed.serializationHint()) {
221+
case ORDINAL -> {
222+
fields.add(indexAsNumericFieldFor(field, isDocument, prefix, indexed.sortable(), indexed.noindex(),
223+
indexed.alias()));
224+
gsonBuilder.registerTypeAdapter(fieldType, EnumTypeAdapter.of(fieldType));
225+
}
226+
default -> fields.add(indexAsTagFieldFor(field, isDocument, prefix, indexed.sortable(), indexed.separator(),
227+
indexed.arrayIndex(), indexed.alias()));
228+
}
220229
}
221230
//
222231
// Any Numeric class -> Numeric Search Field
@@ -293,11 +302,6 @@ else if (fieldType == Point.class) {
293302
fields.addAll(findIndexFields(subfield, subfieldPrefix, isDocument));
294303
}
295304
}
296-
case ORDINAL -> {
297-
fields.add(indexAsNumericFieldFor(field, isDocument, prefix, indexed.sortable(),
298-
indexed.noindex(), indexed.alias()));
299-
gsonBuilder.registerTypeAdapter(fieldType, EnumTypeAdapter.of(fieldType));
300-
}
301305
}
302306
}
303307
}

redis-om-spring/src/main/java/com/redis/om/spring/annotations/Indexed.java

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
// by default, attempt to determine the schema field type from the Java datatype
1414
SchemaFieldType schemaFieldType() default SchemaFieldType.AUTODETECT;
1515

16+
SerializationHint serializationHint() default SerializationHint.NONE;
17+
1618
String fieldName() default "";
1719

1820
String alias() default "";

redis-om-spring/src/main/java/com/redis/om/spring/annotations/SchemaFieldType.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,5 @@ public enum SchemaFieldType {
66
NUMERIC,
77
GEO,
88
VECTOR,
9-
NESTED,
10-
ORDINAL
9+
NESTED
1110
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.redis.om.spring.annotations;
2+
3+
public enum SerializationHint {
4+
ORDINAL,
5+
NONE
6+
}

redis-om-spring/src/test/java/com/redis/om/spring/annotations/document/fixtures/Developer.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.redis.om.spring.annotations.Document;
44
import com.redis.om.spring.annotations.Indexed;
55
import com.redis.om.spring.annotations.SchemaFieldType;
6+
import com.redis.om.spring.annotations.SerializationHint;
67
import lombok.AccessLevel;
78
import lombok.AllArgsConstructor;
89
import lombok.Builder;
@@ -22,7 +23,7 @@ public class Developer {
2223
@Id
2324
private String id;
2425

25-
@Indexed(schemaFieldType = SchemaFieldType.ORDINAL)
26+
@Indexed(serializationHint = SerializationHint.ORDINAL)
2627
private DeveloperType typeOrdinal;
2728

2829
private DeveloperState state;

redis-om-spring/src/test/java/com/redis/om/spring/annotations/document/fixtures/KitchenSink.java

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class KitchenSink {
4141
private Instant instant;
4242
@NonNull
4343
private OffsetDateTime localOffsetDateTime;
44+
4445
@Singular
4546
@JsonAdapter(SetToStringAdapter.class)
4647
private Set<String> setThings;

redis-om-spring/src/test/java/com/redis/om/spring/annotations/document/fixtures/Permit.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package com.redis.om.spring.annotations.document.fixtures;
22

33
import com.google.gson.annotations.JsonAdapter;
4-
import com.redis.om.spring.annotations.Document;
5-
import com.redis.om.spring.annotations.DocumentScore;
6-
import com.redis.om.spring.annotations.Indexed;
7-
import com.redis.om.spring.annotations.Searchable;
4+
import com.redis.om.spring.annotations.*;
85
import com.redis.om.spring.serialization.gson.SetToStringAdapter;
96
import lombok.*;
107
import org.springframework.data.annotation.Id;

0 commit comments

Comments
 (0)