diff --git a/astra/src/main/java/com/slack/astra/logstore/schema/SchemaAwareLogDocumentBuilderImpl.java b/astra/src/main/java/com/slack/astra/logstore/schema/SchemaAwareLogDocumentBuilderImpl.java index a606c1be2e..ce0fcc7a39 100644 --- a/astra/src/main/java/com/slack/astra/logstore/schema/SchemaAwareLogDocumentBuilderImpl.java +++ b/astra/src/main/java/com/slack/astra/logstore/schema/SchemaAwareLogDocumentBuilderImpl.java @@ -262,7 +262,8 @@ private void convertValueAndIndexField( indexTypedField(doc, key, convertedValue, registeredField); } else { LOG.warn( - "No mapping found to convert value from={} to={}", + "No mapping found to convert key={} value from={} to={}", + key, valueType.name, registeredField.fieldType.name); convertErrorCounter.increment(); diff --git a/astra/src/main/java/com/slack/astra/metadata/schema/FieldType.java b/astra/src/main/java/com/slack/astra/metadata/schema/FieldType.java index 155e05ac29..5e60c87f55 100644 --- a/astra/src/main/java/com/slack/astra/metadata/schema/FieldType.java +++ b/astra/src/main/java/com/slack/astra/metadata/schema/FieldType.java @@ -404,6 +404,9 @@ public static Object convertFieldValue(Object value, FieldType fromType, FieldTy if (toType == FieldType.BOOLEAN) { return ((String) value).equals("1") || ((String) value).equalsIgnoreCase("true"); } + if (toType == FieldType.BINARY) { + return ByteString.copyFromUtf8((String) value); + } } // Int type @@ -499,6 +502,11 @@ public static Object convertFieldValue(Object value, FieldType fromType, FieldTy return (Boolean) value ? 1d : 0d; } } + if (fromType == FieldType.BINARY) { + if (isTexty(toType)) { + return ((ByteString) value).toStringUtf8(); + } + } return null; } diff --git a/astra/src/test/java/com/slack/astra/metadata/schema/FieldTypeTest.java b/astra/src/test/java/com/slack/astra/metadata/schema/FieldTypeTest.java index 40cdc2b566..943dc547d2 100644 --- a/astra/src/test/java/com/slack/astra/metadata/schema/FieldTypeTest.java +++ b/astra/src/test/java/com/slack/astra/metadata/schema/FieldTypeTest.java @@ -3,6 +3,7 @@ import static com.slack.astra.metadata.schema.FieldType.convertFieldValue; import static org.assertj.core.api.Assertions.assertThat; +import com.google.protobuf.ByteString; import org.junit.jupiter.api.Test; public class FieldTypeTest { @@ -14,6 +15,8 @@ public void testValueTypeConversionWorks() { assertThat(convertFieldValue("3", FieldType.TEXT, FieldType.DOUBLE)).isEqualTo(3.0d); assertThat(convertFieldValue("4", FieldType.TEXT, FieldType.STRING)).isEqualTo("4"); assertThat(convertFieldValue("4", FieldType.STRING, FieldType.TEXT)).isEqualTo("4"); + assertThat(convertFieldValue("[1,2,3]", FieldType.KEYWORD, FieldType.BINARY)) + .isEqualTo(ByteString.copyFromUtf8("[1,2,3]")); assertThat(convertFieldValue("1", FieldType.STRING, FieldType.BOOLEAN)).isEqualTo(true); assertThat(convertFieldValue("0", FieldType.STRING, FieldType.BOOLEAN)).isEqualTo(false); assertThat(convertFieldValue("true", FieldType.STRING, FieldType.BOOLEAN)).isEqualTo(true); @@ -132,5 +135,10 @@ public void testValueTypeConversionWorks() { assertThat(convertFieldValue(1L, FieldType.LONG, FieldType.LONG)).isEqualTo(1L); assertThat(convertFieldValue(2.0f, FieldType.FLOAT, FieldType.FLOAT)).isEqualTo(2.0f); assertThat(convertFieldValue(3.0d, FieldType.DOUBLE, FieldType.DOUBLE)).isEqualTo(3.0d); + + assertThat( + convertFieldValue( + ByteString.copyFromUtf8("[1,2,3]"), FieldType.BINARY, FieldType.KEYWORD)) + .isEqualTo("[1,2,3]"); } }