¿DynamoDB admite búsqueda de texto completo?
No de forma nativa. DynamoDB no tiene búsqueda de texto completo: ni ranking por relevancia, ni stemming, ni coincidencia difusa — las herramientas de cadenas integradas son comparaciones exactas, begins_with sobre claves de ordenación y filtros de subcadena con contains. La respuesta de AWS es la integración zero-ETL con Amazon OpenSearch Service, que replica una tabla en un índice de búsqueda para búsqueda de texto completo, vectorial y semántica.
Lo que puedes hacer de forma nativa
begins_withsobre una clave de ordenación — coincidencia por prefijo eficiente dentro de una partición; la columna vertebral de los modelos de clave de ordenación jerárquica.containsen una expresión de filtro — coincidencia por subcadena, pero los filtros se ejecutan después de la lectura, así que en un Scan sigues pagando por leer cada elemento examinado. Consulta la guía de estrategias de filtrado para saber cuándo es aceptable.
Ninguno ordena los resultados por relevancia, ni tolera erratas, ni entiende los límites de las palabras — son predicados de cadena, no búsqueda.
La misma consulta, de cuatro formas, medida
Cargamos 100 elementos (84 KB) con títulos de producto y escaneamos la tabla cuatro veces, cambiando solo el término de búsqueda:
| Filtro | Count | ScannedCount | Unidades de lectura | Coincidencias |
|---|---|---|---|---|
contains(title, "run") | 3 | 100 | 11 | Shoes for runs · Trail running shoe · Sneaker, runner grade |
contains(title, "Run") | 2 | 100 | 11 | Running shoes · Rungs for a ladder |
contains(title, "running") | 1 | 100 | 11 | Trail running shoe |
contains(title, "runing") | 0 | 100 | 11 | nada |
Lee esas filas como las leería alguien escribiendo en una caja de búsqueda. "run" no encuentra Running shoes ni RUNNING SHORTS, porque la comparación distingue mayúsculas. "Run" recupera Running shoes, sigue sin encontrar RUNNING SHORTS y arrastra Rungs for a ladder, porque una subcadena no tiene ni idea de dónde empieza una palabra. Ninguna combinación de mayúsculas de esa consulta encuentra las tres. Quita una letra y no obtienes nada en absoluto, porque no hay ninguna alternativa difusa a la que degradar.
La última columna es la parte que cuesta dinero. Cada Scan consumió 11 unidades de lectura, incluido el que no encontró nada, porque el filtro se ejecuta después de la lectura. AWS lo dice sin rodeos: "A filter expression is applied after a Scan finishes but before the results are returned. Therefore, a Scan consumes the same amount of read capacity, regardless of whether a filter expression is present." Y su propio diagnóstico de la forma de arriba: "A high ScannedCount value with few, or no, Count results indicates an inefficient Scan operation."
Así que el precio de una búsqueda sigue el tamaño del catálogo, nunca la especificidad de la consulta. Conecta esto a una caja de búsqueda que busca mientras escribes y «running shoes» factura la tabla entera trece veces, una por pulsación, para devolver un elemento.
La respuesta nativa de AWS: zero-ETL a OpenSearch
El plugin de DynamoDB para OpenSearch Ingestion sincroniza una tabla con uno o varios índices de OpenSearch: una instantánea inicial se carga mediante la exportación a S3 de DynamoDB (requiere PITR), y luego DynamoDB Streams replica los cambios casi en tiempo real. El pipeline no consume nada del rendimiento de lectura ni de escritura de tu tabla, así que es seguro junto al tráfico de producción — y AWS afirma que la integración habilita búsqueda de texto completo, vectorial y semántica sobre tus datos de DynamoDB.
Profundiza
Si tu «búsqueda» es en realidad una consulta conocida, arregla el modelo en su lugar — las guías de estrategias de filtrado y estrategias de clave de ordenación muestran lo que pueden hacer las claves. Prototipa condiciones begins_with/contains en el constructor de expresiones, y descarga DynoTable para filtrar datos de tablas en vivo mientras exploras.
Referencias
- DynamoDB zero-ETL integration with Amazon OpenSearch Service — Amazon DynamoDB Developer Guide
- What is Amazon DynamoDB? — Amazon DynamoDB Developer Guide
- Comparison operator and function reference — Amazon DynamoDB Developer Guide
- Scanning tables in DynamoDB — Amazon DynamoDB Developer Guide
Verificado por última vez el 2026-07-13 contra la documentación oficial de AWS enlazada arriba.
Los cuatro escaneos se ejecutaron el 2026-07-28 contra DynamoDB Local 3.3.0 con @aws-sdk/client-dynamodb 3.1095.0 sobre Node v24.18.0. Count, ScannedCount y las unidades de lectura son las cifras del propio motor.