- Notifications
You must be signed in to change notification settings - Fork 1.9k
Closed
Labels
Milestone
Description
Bug description
The MariaDBVectorStore
does not return the score when doing a similarity search. Instead it adds the distance to the metadata of the document.
Environment
Spring AI 1.0.0
Steps to reproduce
- Embed documents and save them in the
MariaDBVectorStore
- Do a similarity search
Expected behavior
Get the score via the getter of the document.
Actual behaviour
The score is null
and the distance is in the metadata.
Minimal Complete Reproducible example
I did not create an example application, but here is the mapper method for the MaraDBVectorStore
.
Override public Document mapRow(ResultSet rs, int rowNum) throws SQLException { String id = rs.getString(1); String content = rs.getString(2); Map<String, Object> metadata = toMap(rs.getString(3)); float distance = rs.getFloat(4); metadata.put("distance", distance); return new Document(id, content, metadata); }
In comparison, the PgVectorStore
, which also uses the JdbcTemplate
with a custom DocumentRowMapper
does this differently:
@Override public Document mapRow(ResultSet rs, int rowNum) throws SQLException { String id = rs.getString(COLUMN_ID); String content = rs.getString(COLUMN_CONTENT); PGobject pgMetadata = rs.getObject(COLUMN_METADATA, PGobject.class); Float distance = rs.getFloat(COLUMN_DISTANCE); Map<String, Object> metadata = toMap(pgMetadata); metadata.put(DocumentMetadata.DISTANCE.value(), distance); // @formatter:off return Document.builder() .id(id) .text(content) .metadata(metadata) .score(1.0 - distance) .build(); // @formatter:on }