spring-projects/spring-ai · error · IllegalArgumentException

Field has unsupported type

Error message

Field {0} has unsupported type {1}

What it means

RedisVectorStore.schemaField() maps each MetadataField to a RediSearch schema field, supporting only NUMERIC, TAG and TEXT field types. A MetadataField with any other fieldType hits the default branch and throws this IllegalArgumentException. It prevents building an FT.CREATE schema with an unmappable field type.

Solutions

  1. Use only FieldType.NUMERIC, FieldType.TAG or FieldType.TEXT when defining metadata fields for the Redis store
  2. Coerce unsupported types: map BOOLEAN to TAG, dates to NUMERIC (epoch) before building the store
  3. Check for null/default FieldType values coming from shared configuration or other store adapters

Example fix

// before
new MetadataField("active", FieldType.BOOLEAN)
// after
new MetadataField("active", FieldType.TAG)
Defensive patterns

Strategy: validation

Validate before calling

java.util.Set<FieldType> allowed = Set.of(FieldType.NUMERIC, FieldType.TAG, FieldType.TEXT);
fields.forEach(f -> { if (!allowed.contains(f.fieldType)) throw new IllegalArgumentException("Unsupported field type for Redis store: " + f.fieldType); });

Type guard

static boolean isSupportedFieldType(MetadataField f) { return f.fieldType == FieldType.NUMERIC || f.fieldType == FieldType.TAG || f.fieldType == FieldType.TEXT; }

Try / catch

try { RedisVectorStore.builder().metadataFields(fields).build(); } catch (IllegalArgumentException e) { if (e.getMessage().contains("unsupported type")) { /* remap field type */ } }

Prevention

When it happens

Trigger: Constructing the RedisVectorStore with MetadataField instances (via builder metadataFields or an observed metadata mode) whose fieldType is not one of NUMERIC/TAG/TEXT, e.g. a null or custom FieldType value.

Common situations: Copy-pasting MetadataField definitions from another vector store that supports more types (e.g. BOOLEAN or CHUNK); refactor renamed/extended FieldType enum; building fields programmatically with a wrong enum constant.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of spring-projects/spring-ai@98a7beda4f (2026-09-11). Data as JSON: /api/errors/ce22fa5b2936c432. Report an issue: GitHub.

Appendix: source

Thrown at vector-stores/spring-ai-redis-store/src/main/java/org/springframework/ai/vectorstore/redis/RedisVectorStore.java:711

			.attributes(vectorAttrs)
			.as(this.embeddingFieldName)
			.build());

		if (!CollectionUtils.isEmpty(this.metadataFields)) {
			for (MetadataField field : this.metadataFields) {
				fields.add(schemaField(field));
			}
		}
		return fields;
	}

	private SchemaField schemaField(MetadataField field) {
		String fieldName = jsonPath(field.name);
		return switch (field.fieldType) {
			case NUMERIC -> NumericField.of(fieldName).as(field.name);
			case TAG -> TagField.of(fieldName).as(field.name);
			case TEXT -> TextField.of(fieldName).as(field.name);
			default -> throw new IllegalArgumentException(
					MessageFormat.format("Field {0} has unsupported type {1}", field.name, field.fieldType));
		};
	}

	private VectorAlgorithm vectorAlgorithm() {
		if (this.vectorAlgorithm == Algorithm.HNSW) {
			return VectorAlgorithm.HNSW;
		}
		return VectorAlgorithm.FLAT;
	}

	private String jsonPath(String field) {
		return JSON_PATH_PREFIX + field;
	}

	@Override
	public VectorStoreObservationContext.Builder createObservationContextBuilder(String operationName) {
		VectorStoreSimilarityMetric similarityMetric = switch (this.distanceMetric) {

View on GitHub (pinned to 98a7beda4f)