diff --git a/.chloggen/retrieval-span-support.yaml b/.chloggen/retrieval-span-support.yaml
new file mode 100644
index 0000000000..4cd7e188dc
--- /dev/null
+++ b/.chloggen/retrieval-span-support.yaml
@@ -0,0 +1,22 @@
+# Use this changelog template to create an entry for release notes.
+#
+# If your change doesn't affect end users you should instead start
+# your pull request title with [chore] or use the "Skip Changelog" label.
+
+# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
+change_type: 'new_component'
+
+# The name of the area of concern in the attributes-registry, (e.g. http, cloud, db)
+component: db
+
+# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
+note: Add retrieval span support to the db semantic conventions.
+
+# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
+# The values here must be integers.
+issues: [2907]
+
+# (Optional) One or more lines of additional information to render under the primary note.
+# These lines will be padded with 2 spaces and then inserted directly into the document.
+# Use pipe (|) for multiline entries.
+subtext:
diff --git a/docs/database/retrieval.md b/docs/database/retrieval.md
new file mode 100644
index 0000000000..6072ef3cad
--- /dev/null
+++ b/docs/database/retrieval.md
@@ -0,0 +1,165 @@
+
+
+## Retrieval Spans
+
+
+
+
+
+
+
+
+**Status:** 
+
+Spans representing retrieval calls adhere to the general [Semantic Conventions for Database Client Spans](/docs/database/database-spans.md).
+
+Retrieval calls can be made to vector databases, search engines, and other systems optimized
+for similarity search and retrieval operations. These systems are commonly used in
+Retrieval-Augmented Generation (RAG) applications and semantic search.
+
+`db.system.name` SHOULD be set to the specific database system being used (e.g., `"pinecone"`,
+`"weaviate"`, `"qdrant"`, `"chroma"`, `"milvus"`) and SHOULD be provided **at span creation time**.
+
+**Span name** SHOULD follow the general [database span name convention](/docs/database/database-spans.md#name).
+For retrieval operations, the span name SHOULD be `{db.operation.name} {db.collection.name}` when both
+are available, or `{db.operation.name}` otherwise. Common operation names include `search`, `query`,
+`retrieve`, or database-specific operation names.
+
+**Span kind** SHOULD be `CLIENT`. It MAY be set to `INTERNAL` on spans representing
+in-memory retrieval operations.
+
+**Span status** SHOULD follow the [Recording Errors](/docs/general/recording-errors.md) document.
+
+**Attributes:**
+
+| Key | Stability | [Requirement Level](https://opentelemetry.io/docs/specs/semconv/general/attribute-requirement-level/) | Value Type | Description | Example Values |
+|---|---|---|---|---|---|
+| [`db.system.name`](/docs/registry/attributes/db.md) |  | `Required` | string | The database management system (DBMS) product as identified by the client instrumentation. [1] | `other_sql`; `softwareag.adabas`; `actian.ingres` |
+| [`db.operation.name`](/docs/registry/attributes/db.md) |  | `Conditionally Required` [2] | string | The name of the operation or command being executed. [3] | `findAndModify`; `HMSET`; `SELECT` |
+| [`db.response.status_code`](/docs/registry/attributes/db.md) |  | `Conditionally Required` [4] | string | Database response status code. [5] | `102`; `ORA-17002`; `08P01`; `404` |
+| [`error.type`](/docs/registry/attributes/error.md) |  | `Conditionally Required` If and only if the operation failed. | string | Describes a class of error the operation ended with. [6] | `timeout`; `java.net.UnknownHostException`; `server_certificate_invalid`; `500` |
+| [`server.port`](/docs/registry/attributes/server.md) |  | `Conditionally Required` [7] | int | Server port number. [8] | `80`; `8080`; `443` |
+| [`db.operation.batch.size`](/docs/registry/attributes/db.md) |  | `Recommended` | int | The number of queries included in a batch operation. [9] | `2`; `3`; `4` |
+| [`db.query.text`](/docs/registry/attributes/db.md) |  | `Recommended` [10] | string | The query text or vector representation used for retrieval. [11] | `[0.1, 0.2, 0.3, ...]`; `search term`; `semantic query text` |
+| [`db.retrieval.documents_retrieved`](/docs/registry/attributes/db.md) |  | `Recommended` | int | The actual number of documents retrieved. [12] | `5`; `10`; `15` |
+| [`db.retrieval.top_k`](/docs/registry/attributes/db.md) |  | `Recommended` | int | The maximum number of results requested. [13] | `5`; `10`; `20` |
+| [`db.retrieval.type`](/docs/registry/attributes/db.md) |  | `Recommended` | string | The type of retrieval operation being performed. [14] | `similarity`; `hybrid`; `keyword` |
+| [`server.address`](/docs/registry/attributes/server.md) |  | `Recommended` | string | Name of the database host. [15] | `example.com`; `10.1.2.80`; `/tmp/my.sock` |
+
+**[1] `db.system.name`:** For retrieval databases, this should be set to the specific system name (e.g., `"pinecone"`, `"weaviate"`, `"qdrant"`, `"chroma"`, `"milvus"`).
+
+**[2] `db.operation.name`:** If readily available and if there is a single operation name that describes the database call.
+
+**[3] `db.operation.name`:** It is RECOMMENDED to capture the value as provided by the application
+without attempting to do any case normalization.
+
+The operation name SHOULD NOT be extracted from `db.query.text`,
+when the database system supports query text with multiple operations
+in non-batch operations.
+
+If spaces can occur in the operation name, multiple consecutive spaces
+SHOULD be normalized to a single space.
+
+For batch operations, if the individual operations are known to have the same operation name
+then that operation name SHOULD be used prepended by `BATCH `,
+otherwise `db.operation.name` SHOULD be `BATCH` or some other database
+system specific term if more applicable.
+
+**[4] `db.response.status_code`:** If the operation failed and status code is available.
+
+**[5] `db.response.status_code`:** The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.
+Semantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.
+
+**[6] `error.type`:** The `error.type` SHOULD match the `db.response.status_code` returned by the database or the client library, or the canonical name of exception that occurred.
+When using canonical exception type name, instrumentation SHOULD do the best effort to report the most relevant type. For example, if the original exception is wrapped into a generic one, the original exception SHOULD be preferred.
+Instrumentations SHOULD document how `error.type` is populated.
+
+**[7] `server.port`:** If using a port other than the default port for this DBMS and if `server.address` is set.
+
+**[8] `server.port`:** When observed from the client side, and when communicating through an intermediary, `server.port` SHOULD represent the server port behind any intermediaries, for example proxies, if it's available.
+
+**[9] `db.operation.batch.size`:** Operations are only considered batches when they contain two or more operations, and so `db.operation.batch.size` SHOULD never be `1`.
+
+**[10] `db.query.text`:** Should be collected when available and after sanitization to exclude sensitive data.
+
+**[11] `db.query.text`:** For vector similarity searches, this may contain the query vector representation or a textual description of the query. For hybrid searches, it may contain the keyword query portion. The value should be sanitized to remove sensitive information.
+
+**[12] `db.retrieval.documents_retrieved`:** This represents the count of documents/results actually returned by the database, which may be less than `db.retrieval.top_k` if fewer matching results were found.
+
+**[13] `db.retrieval.top_k`:** This represents the limit parameter or top_k value specified in the retrieval query, indicating how many results the client requested. The actual number of results returned may be captured in `db.retrieval.documents_retrieved`.
+
+**[14] `db.retrieval.type`:** This attribute describes the retrieval strategy used by the database or vector store. Common types include similarity search, hybrid search (combining multiple strategies), keyword search, or other database-specific retrieval methods.
+
+**[15] `server.address`:** When observed from the client side, and when communicating through an intermediary, `server.address` SHOULD represent the server address behind any intermediaries, for example proxies, if it's available.
+
+The following attributes can be important for making sampling decisions
+and SHOULD be provided **at span creation time** (if provided at all):
+
+* [`db.operation.name`](/docs/registry/attributes/db.md)
+* [`db.query.text`](/docs/registry/attributes/db.md)
+* [`db.system.name`](/docs/registry/attributes/db.md)
+* [`server.address`](/docs/registry/attributes/server.md)
+* [`server.port`](/docs/registry/attributes/server.md)
+
+---
+
+`db.system.name` has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.
+
+| Value | Description | Stability |
+|---|---|---|
+| `actian.ingres` | [Actian Ingres](https://www.actian.com/databases/ingres/) |  |
+| `aws.dynamodb` | [Amazon DynamoDB](https://aws.amazon.com/pm/dynamodb/) |  |
+| `aws.redshift` | [Amazon Redshift](https://aws.amazon.com/redshift/) |  |
+| `azure.cosmosdb` | [Azure Cosmos DB](https://learn.microsoft.com/azure/cosmos-db) |  |
+| `cassandra` | [Apache Cassandra](https://cassandra.apache.org/) |  |
+| `clickhouse` | [ClickHouse](https://clickhouse.com/) |  |
+| `cockroachdb` | [CockroachDB](https://www.cockroachlabs.com/) |  |
+| `couchbase` | [Couchbase](https://www.couchbase.com/) |  |
+| `couchdb` | [Apache CouchDB](https://couchdb.apache.org/) |  |
+| `derby` | [Apache Derby](https://db.apache.org/derby/) |  |
+| `elasticsearch` | [Elasticsearch](https://www.elastic.co/elasticsearch) |  |
+| `firebirdsql` | [Firebird](https://www.firebirdsql.org/) |  |
+| `gcp.spanner` | [Google Cloud Spanner](https://cloud.google.com/spanner) |  |
+| `geode` | [Apache Geode](https://geode.apache.org/) |  |
+| `h2database` | [H2 Database](https://h2database.com/) |  |
+| `hbase` | [Apache HBase](https://hbase.apache.org/) |  |
+| `hive` | [Apache Hive](https://hive.apache.org/) |  |
+| `hsqldb` | [HyperSQL Database](https://hsqldb.org/) |  |
+| `ibm.db2` | [IBM Db2](https://www.ibm.com/db2) |  |
+| `ibm.informix` | [IBM Informix](https://www.ibm.com/products/informix) |  |
+| `ibm.netezza` | [IBM Netezza](https://www.ibm.com/products/netezza) |  |
+| `influxdb` | [InfluxDB](https://www.influxdata.com/) |  |
+| `instantdb` | [Instant](https://www.instantdb.com/) |  |
+| `intersystems.cache` | [InterSystems Caché](https://www.intersystems.com/products/cache/) |  |
+| `mariadb` | [MariaDB](https://mariadb.org/) |  |
+| `memcached` | [Memcached](https://memcached.org/) |  |
+| `microsoft.sql_server` | [Microsoft SQL Server](https://www.microsoft.com/sql-server) |  |
+| `mongodb` | [MongoDB](https://www.mongodb.com/) |  |
+| `mysql` | [MySQL](https://www.mysql.com/) |  |
+| `neo4j` | [Neo4j](https://neo4j.com/) |  |
+| `opensearch` | [OpenSearch](https://opensearch.org/) |  |
+| `oracle.db` | [Oracle Database](https://www.oracle.com/database/) |  |
+| `other_sql` | Some other SQL database. Fallback only. |  |
+| `postgresql` | [PostgreSQL](https://www.postgresql.org/) |  |
+| `redis` | [Redis](https://redis.io/) |  |
+| `sap.hana` | [SAP HANA](https://www.sap.com/products/technology-platform/hana/what-is-sap-hana.html) |  |
+| `sap.maxdb` | [SAP MaxDB](https://maxdb.sap.com/) |  |
+| `softwareag.adabas` | [Adabas (Adaptable Database System)](https://documentation.softwareag.com/?pf=adabas) |  |
+| `sqlite` | [SQLite](https://www.sqlite.org/) |  |
+| `teradata` | [Teradata](https://www.teradata.com/) |  |
+| `trino` | [Trino](https://trino.io/) |  |
+
+---
+
+`error.type` has the following list of well-known values. If one of them applies, then the respective value MUST be used; otherwise, a custom value MAY be used.
+
+| Value | Description | Stability |
+|---|---|---|
+| `_OTHER` | A fallback error value to be used when the instrumentation doesn't define a custom value. |  |
+
+
+
+
+
diff --git a/docs/registry/attributes/db.md b/docs/registry/attributes/db.md
index a98f57e3c3..884a7c515c 100644
--- a/docs/registry/attributes/db.md
+++ b/docs/registry/attributes/db.md
@@ -27,8 +27,11 @@ This group defines the attributes used to describe telemetry in the context of d
| `db.query.text` |  | string | The database query being executed. [8] | `SELECT * FROM wuser_table where username = ?`; `SET mykey ?` |
| `db.response.returned_rows` |  | int | Number of rows returned by the operation. | `10`; `30`; `1000` |
| `db.response.status_code` |  | string | Database response status code. [9] | `102`; `ORA-17002`; `08P01`; `404` |
-| `db.stored_procedure.name` |  | string | The name of a stored procedure within the database. [10] | `GetCustomer` |
-| `db.system.name` |  | string | The database management system (DBMS) product as identified by the client instrumentation. [11] | `other_sql`; `softwareag.adabas`; `actian.ingres` |
+| `db.retrieval.documents_retrieved` |  | int | The actual number of documents or results retrieved by the operation. [10] | `5`; `10`; `15` |
+| `db.retrieval.top_k` |  | int | The maximum number of results requested to be retrieved. [11] | `5`; `10`; `20`; `100` |
+| `db.retrieval.type` |  | string | The type of retrieval operation being performed. [12] | `similarity`; `hybrid`; `keyword`; `mmr` |
+| `db.stored_procedure.name` |  | string | The name of a stored procedure within the database. [13] | `GetCustomer` |
+| `db.system.name` |  | string | The database management system (DBMS) product as identified by the client instrumentation. [14] | `other_sql`; `softwareag.adabas`; `actian.ingres` |
**[1] `db.collection.name`:** It is RECOMMENDED to capture the value as provided by the application
without attempting to do any case normalization.
@@ -103,13 +106,19 @@ Parameterized query text SHOULD NOT be sanitized. Even though parameterized quer
**[9] `db.response.status_code`:** The status code returned by the database. Usually it represents an error code, but may also represent partial success, warning, or differentiate between various types of successful outcomes.
Semantic conventions for individual database systems SHOULD document what `db.response.status_code` means in the context of that system.
-**[10] `db.stored_procedure.name`:** It is RECOMMENDED to capture the value as provided by the application
+**[10] `db.retrieval.documents_retrieved`:** This represents the count of documents/results actually returned by the database, which may be less than `db.retrieval.top_k` if fewer matching results were found.
+
+**[11] `db.retrieval.top_k`:** This represents the limit parameter or top_k value specified in the retrieval query, indicating how many results the client requested. The actual number of results returned may be captured in `db.retrieval.documents_retrieved`.
+
+**[12] `db.retrieval.type`:** This attribute describes the retrieval strategy used by the database or vector store. Common types include similarity search, hybrid search (combining multiple strategies), keyword search, or other database-specific retrieval methods.
+
+**[13] `db.stored_procedure.name`:** It is RECOMMENDED to capture the value as provided by the application
without attempting to do any case normalization.
For batch operations, if the individual operations are known to have the same
stored procedure name then that stored procedure name SHOULD be used.
-**[11] `db.system.name`:** The actual DBMS may differ from the one identified by the client. For example, when using PostgreSQL client libraries to connect to a CockroachDB, the `db.system.name` is set to `postgresql` based on the instrumentation's best knowledge.
+**[14] `db.system.name`:** The actual DBMS may differ from the one identified by the client. For example, when using PostgreSQL client libraries to connect to a CockroachDB, the `db.system.name` is set to `postgresql` based on the instrumentation's best knowledge.
---
diff --git a/model/database/registry.yaml b/model/database/registry.yaml
index e3da7104c8..d0a27e52b3 100644
--- a/model/database/registry.yaml
+++ b/model/database/registry.yaml
@@ -175,6 +175,32 @@ groups:
stability: development
brief: Number of rows returned by the operation.
examples: [10, 30, 1000]
+ - id: db.retrieval.type
+ type: string
+ stability: development
+ brief: The type of retrieval operation being performed.
+ note: >
+ This attribute describes the retrieval strategy used by the database or vector store.
+ Common types include similarity search, hybrid search (combining multiple strategies),
+ keyword search, or other database-specific retrieval methods.
+ examples: ["similarity", "hybrid", "keyword", "mmr"]
+ - id: db.retrieval.top_k
+ type: int
+ stability: development
+ brief: The maximum number of results requested to be retrieved.
+ note: >
+ This represents the limit parameter or top_k value specified in the retrieval query,
+ indicating how many results the client requested. The actual number of results
+ returned may be captured in `db.retrieval.documents_retrieved`.
+ examples: [5, 10, 20, 100]
+ - id: db.retrieval.documents_retrieved
+ type: int
+ stability: development
+ brief: The actual number of documents or results retrieved by the operation.
+ note: >
+ This represents the count of documents/results actually returned by the database,
+ which may be less than `db.retrieval.top_k` if fewer matching results were found.
+ examples: [5, 10, 15]
- id: db.system.name
brief: The database management system (DBMS) product as identified by the client instrumentation.
note: >
diff --git a/model/database/spans.yaml b/model/database/spans.yaml
index c99e616fbb..283e6b74bc 100644
--- a/model/database/spans.yaml
+++ b/model/database/spans.yaml
@@ -1017,3 +1017,61 @@ groups:
For batch operations, if the individual operations are known to have the same query text then that query text SHOULD be used,
otherwise all of the individual query texts SHOULD be concatenated with separator `; ` or some other database system specific separator if more applicable.
examples: ["SELECT * FROM wuser_table where username = :mykey"]
+ - id: span.db.retrieval.client
+ type: span
+ stability: development
+ extends: trace.db.common.minimal
+ span_kind: client
+ brief: >
+ Spans representing retrieval calls adhere to the general
+ [Semantic Conventions for Database Client Spans](/docs/database/database-spans.md).
+ note: |
+ Retrieval calls can be made to vector databases, search engines, and other systems optimized
+ for similarity search and retrieval operations. These systems are commonly used in
+ Retrieval-Augmented Generation (RAG) applications and semantic search.
+
+ `db.system.name` SHOULD be set to the specific database system being used (e.g., `"pinecone"`,
+ `"weaviate"`, `"qdrant"`, `"chroma"`, `"milvus"`) and SHOULD be provided **at span creation time**.
+
+ **Span name** SHOULD follow the general [database span name convention](/docs/database/database-spans.md#name).
+ For retrieval operations, the span name SHOULD be `{db.operation.name} {db.collection.name}` when both
+ are available, or `{db.operation.name}` otherwise. Common operation names include `search`, `query`,
+ `retrieve`, or database-specific operation names.
+
+ **Span kind** SHOULD be `CLIENT`. It MAY be set to `INTERNAL` on spans representing
+ in-memory retrieval operations.
+ attributes:
+ - ref: db.system.name
+ sampling_relevant: true
+ requirement_level: required
+ note: >
+ For retrieval databases, this should be set to the specific system name
+ (e.g., `"pinecone"`, `"weaviate"`, `"qdrant"`, `"chroma"`, `"milvus"`).
+ - ref: db.retrieval.type
+ requirement_level: recommended
+ brief: >
+ The type of retrieval operation being performed.
+ examples: ["similarity", "hybrid", "keyword"]
+ - ref: db.retrieval.top_k
+ requirement_level: recommended
+ brief: >
+ The maximum number of results requested.
+ examples: [5, 10, 20]
+ - ref: db.retrieval.documents_retrieved
+ requirement_level: recommended
+ brief: >
+ The actual number of documents retrieved.
+ examples: [5, 10, 15]
+ - ref: db.query.text
+ sampling_relevant: true
+ requirement_level:
+ recommended: >
+ Should be collected when available and after sanitization to exclude sensitive data.
+ brief: >
+ The query text or vector representation used for retrieval.
+ note: >
+ For vector similarity searches, this may contain the query vector representation
+ or a textual description of the query. For hybrid searches, it may contain
+ the keyword query portion. The value should be sanitized to remove sensitive information.
+ examples: ["[0.1, 0.2, 0.3, ...]", "search term", "semantic query text"]
+