Descripción general de la indexación

Los índices son un factor importante en el rendimiento de una base de datos. Al igual que el índice de un libro, que asocia los temas de un libro a los números de página, un índice de base de datos asocia los elementos de una base de datos a sus ubicaciones en la base de datos. Cuando consultas una base de datos, esta puede usar un índice para identificar rápidamente las ubicaciones de los elementos que has solicitado.

En esta página se describen los dos tipos de índices que usa Firestore: índices de campo único e índices compuestos.

Definición y estructura de índices

Un índice se define en una lista de campos de un documento determinado, con un modo de índice correspondiente para cada campo.

Un índice contiene una entrada por cada campo cuyo nombre se indica en la definición del índice. El índice incluye todos los documentos que son los posibles resultados de las consultas basadas en el índice. Un documento se incluye en el índice solo si tiene un valor indexado definido para cada campo utilizado en el índice. Si la definición del índice hace referencia a un campo para el que el documento no tiene ningún valor definido, ese documento no aparecerá en el índice. En este caso, el documento nunca se devolverá como resultado de ninguna consulta basada en el índice.

El índice compuesto se ordena por los valores de los campos, en el orden especificado en la definición del índice.

Un índice detrás de cada consulta

Si no hay ningún índice para una consulta, la mayoría de las bases de datos rastrean su contenido elemento por elemento, un proceso lento que se ralentiza aún más a medida que crece la base de datos. Firestore garantiza un alto rendimiento de las consultas mediante el uso de índices en todas las consultas. Por lo tanto, el rendimiento de las consultas depende del tamaño del conjunto de resultados y no del número de elementos de la base de datos.

Menos gestión de índices y más desarrollo de aplicaciones

Firestore incluye funciones que reducen el tiempo que tienes que dedicar a la gestión de índices. Los índices necesarios para las consultas más básicas se crean automáticamente. Mientras usas y pruebas tu aplicación, Firestore te ayuda a identificar y crear índices adicionales que tu aplicación necesita.

Tipos de índice

Firestore usa dos tipos de índices: de campo único y compuestos. Además del número de campos indexados, los índices de campo único y los compuestos se diferencian en la forma de gestionarlos.

Índices de un solo campo

Un índice de un solo campo almacena una asignación ordenada de todos los documentos de una colección que contienen un campo específico. Cada entrada de un índice de campo único registra el valor de un documento para un campo específico y la ubicación del documento en la base de datos. Firestore usa estos índices para realizar muchas consultas básicas. Los índices de un solo campo se gestionan configurando los ajustes de indexación automática y las exenciones de índices de la base de datos.

Indexación automática

De forma predeterminada, Firestore mantiene automáticamente índices de un solo campo para cada campo de un documento y cada subcampo de un mapa. Firestore usa los siguientes ajustes predeterminados para los índices de campo único:

  • En el caso de los campos que no son matrices ni mapas, Firestore define dos índices de un solo campo de ámbito de colección, uno en modo ascendente y otro en modo descendente.

  • Por cada campo de mapa, Firestore crea lo siguiente:

    • Un índice ascendente de ámbito de colección para cada subcampo que no sea una matriz ni un mapa.
    • Un índice descendente de ámbito de colección por cada subcampo que no sea una matriz ni un mapa.
    • Un índice array-contains con ámbito de colección para cada subcampo de matriz.
    • Firestore indexa de forma recursiva cada subcampo de mapa.
  • Por cada campo de matriz de un documento, Firestore crea y mantiene un índice array-contains con ámbito de colección.

  • Los índices de un solo campo con permiso de grupo de colecciones no se mantienen de forma predeterminada.

Exenciones de índices de campo único

Puedes eximir un campo de la configuración de indexación automática creando una exención de índice de un solo campo. Una exención de indexación anula la configuración automática de índices de toda la base de datos. Una exención puede habilitar un índice de un solo campo que, de lo contrario, la configuración de indexación automática inhabilitaría, o inhabilitar un índice de un solo campo que, de lo contrario, la indexación automática habilitaría. En los casos en los que las exenciones pueden ser útiles, consulta las prácticas recomendadas de indexación.

Usa el valor de la ruta de acceso del campo * para añadir exenciones de índice a nivel de colección en todos los campos de un grupo de colecciones. Por ejemplo, en el grupo de colecciones comments, define la ruta del campo como * para que coincida con todos los campos del grupo de colecciones comments y deshabilita la indexación de todos los campos del grupo de colecciones. Después, puedes añadir exenciones para indexar solo los campos necesarios para tus consultas. Reducir el número de campos indexados disminuye los costes de almacenamiento y puede mejorar el rendimiento de escritura.

Si creas una exención de índice de un solo campo para un campo de mapa, los subcampos del mapa heredarán esa configuración. Sin embargo, puedes definir exenciones de índice de un solo campo para subcampos específicos. Si eliminas una exención de un subcampo, este heredará la configuración de exención de su campo superior, si existe, o la configuración de toda la base de datos si no hay exenciones superiores.

Para crear y gestionar exenciones de índices de un solo campo, consulta Gestionar índices.

Índices compuestos

Un índice compuesto almacena una asignación ordenada de todos los documentos de una colección, basada en una lista ordenada de campos que se van a indexar.

Firestore usa índices compuestos para admitir consultas que los índices de campo único todavía no admiten.

Firestore no crea automáticamente índices compuestos como lo hace con los índices de un solo campo debido al gran número de combinaciones de campos posibles. En su lugar, Firestore te ayuda a identificar y crear los índices compuestos necesarios a medida que desarrollas tu aplicación.

Cada vez que intentes hacer una consulta que no sea compatible con un índice, Firestore devolverá un mensaje de error con un enlace que puedes seguir para crear el índice que falta.

También puedes definir y gestionar índices compuestos manualmente con la consola o con la CLI de Firebase. Para obtener más información sobre cómo crear y gestionar índices compuestos, consulta Gestionar índices.

Modos de índice y permisos de consultas

Los índices de un solo campo y los compuestos se configuran de forma diferente, pero ambos requieren que configures los modos de índice y los permisos de consulta.

Modos de índice

Cuando defines un índice, seleccionas un modo de índice para cada campo indexado. El modo de índice de cada campo admite cláusulas de consulta específicas en ese campo. Puede seleccionar uno de los siguientes modos de índice:

Modo de índice Descripción
Ascendente Admite las cláusulas de consulta <, <=, ==, >=, >, !=, in y not-in en el campo y permite ordenar los resultados de forma ascendente según el valor de este campo.
Descendente Admite las cláusulas de consulta <, <=, ==, >=, >, !=, in y not-in en el campo, así como la ordenación de los resultados en orden descendente según el valor de este campo.
Array‑contains Admite las cláusulas de consulta array-contains y array-contains-any en el campo.
Vector Admite cláusulas de consulta FindNearest en el campo.

Permisos de consultas

Cada índice se limita a una colección o a un grupo de colecciones. Esto se conoce como el ámbito de consulta del índice:

Permiso de colección
Firestore crea índices con el permiso de colección de forma predeterminada. Estos índices admiten consultas que devuelven resultados de una sola colección.

Permiso de grupo de colecciones
Un grupo de colecciones incluye todas las colecciones que tienen el mismo ID de colección. Para ejecutar una consulta de grupo de colecciones que devuelva resultados filtrados u ordenados de un grupo de colecciones, debes crear un índice correspondiente con el permiso de grupo de colecciones.

Orden predeterminado y campo __name__

Además de ordenar los documentos por los modos de índice especificados para cada campo (ascendente o descendente) , los índices aplican una ordenación final por el campo __name__ de cada documento. El valor del campo __name__ se asigna a la ruta completa del documento. Esto significa que los documentos del conjunto de resultados que tengan los mismos valores de campo se ordenarán por ruta del documento.

De forma predeterminada, el campo __name__ se ordena en la misma dirección que el último campo ordenado en la definición del índice. Por ejemplo:

Colección Campos indexados Ámbito de consulta
cities nombre, __name__ Colección
cities estado, __name__ Colección
cities país, habitantes, __name__ Colección

Para ordenar los resultados por la dirección __name__ no predeterminada, debes crear ese índice.

Propiedades de índice

Un índice que permite que la consulta se ejecute de la forma más eficiente posible se define mediante las siguientes propiedades:

  • Campos usados en filtros de igualdad
  • Campos usados en los criterios de ordenación
  • Campos usados en filtros de intervalo y de desigualdad (que aún no se han incluido en los criterios de ordenación)
  • Campos usados en agregaciones (que aún no se han incluido en los criterios de ordenación y en los filtros de intervalo y de desigualdad)

Firestore calcula los resultados de las consultas de la siguiente manera:

  1. Identifica el índice correspondiente a la colección, las propiedades de filtro, los operadores de filtro y los criterios de ordenación de la consulta.
  2. Identifica la posición del índice desde la que se inicia la búsqueda. La posición de inicio tiene como prefijo los filtros de igualdad de la consulta y termina con los filtros de intervalo y de desigualdad del primer campo orderBy.
  3. Empieza a analizar el índice y devuelve cada documento que cumpla todos los filtros hasta que el proceso de análisis haga una de las siguientes acciones:
    • Encuentra un documento que no cumple las condiciones del filtro y confirma que ningún documento posterior cumplirá nunca las condiciones del filtro por completo.
    • Llega al final del índice.
    • Recoge el número máximo de resultados solicitado por la consulta.

Ejemplo de indexación

Al crear automáticamente índices de un solo campo, Firestore permite que tu aplicación admita rápidamente las consultas de bases de datos más básicas. Los índices de un solo campo te permiten hacer consultas sencillas basadas en valores de campo y en los comparadores <, <=, ==, >=, > y in. En el caso de los campos de array, te permiten hacer consultas array-contains y array-contains-any.

Para ilustrarlo, vamos a analizar los siguientes ejemplos desde el punto de vista de la creación de índices. El siguiente fragmento crea algunos documentos city en una colección cities y define los campos name, state, country, capital, population y tags de cada documento:

Web
var citiesRef = db.collection("cities");

citiesRef.doc("SF").set({
    name: "San Francisco", state: "CA", country: "USA",
    capital: false, population: 860000,
    regions: ["west_coast", "norcal"] });
citiesRef.doc("LA").set({
    name: "Los Angeles", state: "CA", country: "USA",
    capital: false, population: 3900000,
    regions: ["west_coast", "socal"] });
citiesRef.doc("DC").set({
    name: "Washington, D.C.", state: null, country: "USA",
    capital: true, population: 680000,
    regions: ["east_coast"] });
citiesRef.doc("TOK").set({
    name: "Tokyo", state: null, country: "Japan",
    capital: true, population: 9000000,
    regions: ["kanto", "honshu"] });
citiesRef.doc("BJ").set({
    name: "Beijing", state: null, country: "China",
    capital: true, population: 21500000,
    regions: ["jingjinji", "hebei"] });

Si se utiliza la configuración de indexación automática predeterminada, Firestore actualiza un índice de campo único ascendente por cada campo que no sea de tipo array, un índice de campo único descendente por cada campo que no sea de tipo array y un índice de campo único array-contains para el campo de tipo array. Cada fila de la siguiente tabla representa una entrada de un índice de un solo campo:

Colección Campo indexado Ámbito de consulta
cities Nombre de Colección
cities estado Colección
cities país Colección
cities capital Colección
cities población Colección
cities Nombre de Colección
cities estado Colección
cities país Colección
cities capital Colección
cities población Colección
cities array-contains regiones Colección

Consultas admitidas por índices de un solo campo

Con estos índices de un solo campo creados automáticamente, puede ejecutar consultas sencillas como las siguientes:

Web
const stateQuery = citiesRef.where("state", "==", "CA");
const populationQuery = citiesRef.where("population", "<", 100000);
const nameQuery = citiesRef.where("name", ">=", "San Francisco");

También puedes crear consultas de in e igualdad compuesta (==):

Web
citiesRef.where('country', 'in', ["USA", "Japan", "China"])

// Compound equality queries
citiesRef.where("state", "==", "CO").where("name", "==", "Denver")
citiesRef.where("country", "==", "USA")
         .where("capital", "==", false)
         .where("state", "==", "CA")
         .where("population", "==", 860000)

Si necesitas ejecutar una consulta compuesta que use una comparación de intervalo (<, <=, > o >=) o si necesitas ordenar por otro campo, debes crear un índice compuesto para esa consulta.

El índice array-contains te permite consultar el campo de array regions:

Web
citiesRef.where("regions", "array-contains", "west_coast")
// array-contains-any and array-contains use the same indexes
citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])

Consultas admitidas por índices compuestos

Firestore usa índices compuestos para admitir consultas compuestas que los índices de campo único todavía no admiten. Por ejemplo, necesitarías un índice compuesto para las siguientes consultas:

Web
citiesRef.where("country", "==", "USA").orderBy("population", "asc")
citiesRef.where("country", "==", "USA").where("population", "<", 3800000)
citiesRef.where("country", "==", "USA").where("population", ">", 690000)
// in and == clauses use the same index
citiesRef.where("country", "in", ["USA", "Japan", "China"])
         .where("population", ">", 690000)

Estas consultas requieren el índice compuesto que se muestra a continuación. Como la consulta usa una igualdad (== o in) para el campo country, puedes usar un modo de índice ascendente o descendente para este campo. De forma predeterminada, las cláusulas de desigualdad aplican un orden de clasificación ascendente basado en el campo de la cláusula de desigualdad.

Colección Campos indexados Ámbito de consulta
cities (o ) país, población Colección

Para ejecutar las mismas consultas, pero con un orden de clasificación descendente, necesitas un índice compuesto adicional en la dirección descendente de population:

Web
citiesRef.where("country", "==", "USA").orderBy("population", "desc")

citiesRef.where("country", "==", "USA")
         .where("population", "<", 3800000)
         .orderBy("population", "desc")

citiesRef.where("country", "==", "USA")
         .where("population", ">", 690000)
         .orderBy("population", "desc")

citiesRef.where("country", "in", ["USA", "Japan", "China"])
         .where("population", ">", 690000)
         .orderBy("population", "desc")
Colección Campos indexados Ámbito de consulta
cities país, habitantes Colección
ciudades country, population Colección

Para evitar la pérdida de rendimiento causada por la combinación de índices, te recomendamos que crees un índice compuesto para combinar una consulta array-contains o array-contains-any con cláusulas adicionales:

Web
citiesRef.where("regions", "array-contains", "east_coast")
         .where("capital", "==", true)

// array-contains-any and array-contains use the same index
citiesRef.where("regions", "array-contains-any", ["west_coast", "east_coast"])
         .where("capital", "==", true)
Colección Campos indexados Ámbito de consulta
cities Etiquetas array-contains, (o ) capital Colección

Consultas admitidas por los índices de grupos de colecciones

Para mostrar un índice con el ámbito de un grupo de colecciones, añade una subcolección landmarks a algunos de los documentos city:

Web
var citiesRef = db.collection("cities");

citiesRef.doc("SF").collection("landmarks").doc().set({
    name: "Golden Gate Bridge",
    category : "bridge" });
citiesRef.doc("SF").collection("landmarks").doc().set({
    name: "Golden Gate Park",
    category : "park" });

citiesRef.doc("DC").collection("landmarks").doc().set({
    name: "National Gallery of Art",
    category : "museum" });
citiesRef.doc("DC").collection("landmarks").doc().set({
    name: "National Mall",
    category : "park" });

Con el siguiente índice de un solo campo con permiso de colección, puedes consultar la colección landmarks de una sola ciudad en función del campo category:

Colección Campos indexados Ámbito de consulta
puntos de referencia Categoría (o ) Colección
Web
citiesRef.doc("SF").collection("landmarks").where("category", "==", "park")
citiesRef.doc("SF").collection("landmarks").where("category", "in", ["park", "museum"])

Si quieres consultar los monumentos de todas las ciudades, por ejemplo, ejecuta esta consulta en el grupo de colecciones que consta de todas las colecciones landmarks. También debe habilitar un landmarksíndice de un solo campo con permiso de grupo de colecciones:

Colección Campos indexados Ámbito de consulta
puntos de referencia Categoría (o ) Grupo de colecciones

Con este índice habilitado, puede consultar el grupo de colecciones landmarks:

Web
var landmarksGroupRef = db.collectionGroup("landmarks");

landmarksGroupRef.where("category", "==", "park")
landmarksGroupRef.where("category", "in", ["park", "museum"])

Para ejecutar una consulta de grupo de colecciones que devuelva resultados filtrados u ordenados, debe habilitar un índice de un solo campo o compuesto correspondiente con el permiso de grupo de colecciones. Sin embargo, las consultas de grupos de colecciones que no filtran ni ordenan los resultados no requieren ninguna definición de índice adicional.

Por ejemplo, puede ejecutar la siguiente consulta de grupo de colección sin habilitar un índice adicional:

Web
db.collectionGroup("landmarks").get()

Entradas de índice

Los índices configurados de tu proyecto y la estructura de un documento determinan el número de entradas de índice de un documento. Las entradas de índice se tienen en cuenta para el límite de recuento de entradas de índice.

En el siguiente ejemplo se muestran las entradas de índice de un documento.

Documento

/cities/SF

city_name : "San Francisco"
temperatures : {summer: 67, winter: 55}
neighborhoods : ["Mission", "Downtown", "Marina"]

Índices de un solo campo

  • city_name ASC
  • city_name DESC
  • temperaturas.verano ASC
  • temperatures.summer DESC
  • temperatures.winter ASC
  • temperatures.winter DESC
  • Barrios Array Contains (ASC y DESC)

Índices compuestos

  • city_name ASC, neighborhoods ARRAY
  • city_name DESC, neighborhoods ARRAY

Entradas de índice

Esta configuración de indexación da como resultado las siguientes entradas de índice para el documento:

Índice Datos indexados
Entradas de índices de campo único
city_name ASC city_name: "San Francisco"
city_name DESC city_name: "San Francisco"
temperaturas.verano ASC temperatures.summer: 67
temperatures.summer DESC temperatures.summer: 67
temperatures.winter ASC temperatures.winter: 55
temperatures.winter DESC temperatures.winter: 55
barrios Array Contains ASC barrios: "Mission"
neighborhoods Array Contains DESC barrios: "Mission"
barrios Array Contains ASC barrios: "Centro"
neighborhoods Array Contains DESC barrios: "Centro"
barrios Array Contains ASC neighborhoods: "Marina"
neighborhoods Array Contains DESC neighborhoods: "Marina"
Entradas de índices compuestos
city_name ASC, neighborhoods ARRAY city_name: "San Francisco", neighborhoods: "Mission"
city_name ASC, neighborhoods ARRAY city_name: "San Francisco", neighborhoods: "Downtown"
city_name ASC, neighborhoods ARRAY city_name: "San Francisco", neighborhoods: "Marina"
city_name DESC, neighborhoods ARRAY city_name: "San Francisco", neighborhoods: "Mission"
city_name DESC, neighborhoods ARRAY city_name: "San Francisco", neighborhoods: "Downtown"
city_name DESC, neighborhoods ARRAY city_name: "San Francisco", neighborhoods: "Marina"

Índices y precios

Los índices contribuyen a los costes de almacenamiento de tu aplicación. Para obtener más información sobre cómo calcular el tamaño de almacenamiento de los índices, consulta la sección sobre el tamaño de entrada de índice.

Usar la combinación de índices

Aunque Firestore usa un índice para cada consulta, no es necesario que haya un índice por consulta. En las consultas con varias cláusulas de igualdad (==) y, opcionalmente, una cláusula orderBy, Firestore puede reutilizar los índices. Firestore puede combinar los índices de filtros de igualdad simples para crear los índices compuestos necesarios para consultas de igualdad más grandes.

Puedes reducir los costes de indexación identificando las situaciones en las que puedes usar la combinación de índices. Por ejemplo, en una colección restaurants de una aplicación de valoración de restaurantes:

  • restaurantes

    • burgerthyme

      name : "Burger Thyme"
      category : "burgers"
      city : "San Francisco"
      editors_pick : true
      star_rating : 4

Esta aplicación usa consultas como las siguientes. La aplicación usa combinaciones de cláusulas de igualdad para category, city y editors_pick, y siempre ordena por star_rating ascendente:

Web
db.collection("restaurants").where("category", "==", "burgers")
                            .orderBy("star_rating")

db.collection("restaurants").where("city", "==", "San Francisco")
                            .orderBy("star_rating")

db.collection("restaurants").where("category", "==", "burgers")
                            .where("city", "==", "San Francisco")
                            .orderBy("star_rating")

db.collection("restaurants").where("category", "==", "burgers")
                            .where("city", "==" "San Francisco")
                            .where("editors_pick", "==", true )
                            .orderBy("star_rating")

Podrías crear un índice para cada consulta:

Colección Campos indexados Ámbito de consulta
restaurantes Categoría y valoración con estrellas Colección
restaurantes ciudad, star_rating Colección
restaurantes category, city, star_rating Colección
restaurantes category, city, editors_pick, star_rating Colección

Como solución mejor, puedes reducir el número de índices aprovechando la capacidad de Firestore para combinar índices de cláusulas de igualdad:

Colección Campos indexados Ámbito de consulta
restaurantes Categoría y valoración con estrellas Colección
restaurantes ciudad, star_rating Colección
restaurantes editors_pick, star_rating Colección

Este conjunto de índices no solo es más pequeño, sino que también admite una consulta adicional:

Web
db.collection("restaurants").where("editors_pick", "==", true)
                            .orderBy("star_rating")

Límites de indexación

Los siguientes límites se aplican a los índices. Para obtener más información sobre las cuotas y los límites, consulta Cuotas y límites.

En esta página se identifican los límites y las cuotas de las solicitudes de Firestore.

Límite Detalles
Número máximo de índices compuestos en una base de datos
Número máximo de configuraciones de campo único en una base de datos

Una configuración de nivel de campo puede contener varias configuraciones para el mismo campo. Por ejemplo, una exención de indexación de un solo campo y una política de TTL en el mismo campo cuentan como una configuración de campo para alcanzar el límite.

Número máximo de entradas de índices para cada documento

40.000

El número de entradas de índices es la suma de los siguientes elementos en un documento:

  • Número de entradas de índices de campo único
  • Número de entradas de índices compuestos

Para ver cómo convierte Firestore un documento y un conjunto de índices en entradas de índice, consulta este número de entradas de índice de ejemplo.

Número máximo de campos en un índice compuesto 100
Tamaño máximo de una entrada de índice

7,5 KiB

Para comprobar cómo se calcula el tamaño de entrada de índice en Firestore, consulta la sección sobre el tamaño de entrada de índice.

Suma máxima de los tamaños de las entradas de índice de un documento

8 MiB

El tamaño total es la suma de los siguientes elementos en un documento:

  • La suma del tamaño de las entradas de índices de campo único en un documento
  • La suma del tamaño de las entradas de índices compuestos de un documento
  • Tamaño máximo del valor de un campo indexado

    1500 bytes

    Si el valor del campo supera los 1500 bytes, aparece cortado, y las consultas relacionadas con valores de campo cortados pueden devolver resultados incoherentes

    Prácticas recomendadas para la indexación

    En la mayoría de las aplicaciones, puedes usar la indexación automática y los enlaces del mensaje de error para gestionar tus índices. Sin embargo, puede que quieras añadir exenciones de un solo campo en los siguientes casos:

    Caso Descripción
    Campos de cadena grandes

    Si tienes un campo de cadena que suele contener valores de cadena largos que no usas para las consultas, puedes reducir los costes de almacenamiento eximiendo el campo de la indexación.

    Velocidades de escritura altas en una colección que contiene documentos con valores secuenciales

    Si indexas un campo que aumenta o disminuye de forma secuencial entre los documentos de una colección, como una marca de tiempo, la velocidad de escritura máxima en la colección será de 500 escrituras por segundo. Si no haces consultas basadas en el campo con valores secuenciales, puedes eximir el campo de la indexación para evitar este límite.

    En un caso práctico de IoT con una alta velocidad de escritura, por ejemplo, una colección que contenga documentos con un campo de marca de tiempo podría acercarse al límite de 500 escrituras por segundo.

    Campos TTL

    Si usas políticas de tiempo de vida (TTL), ten en cuenta que el campo TTL debe ser una marca de tiempo. La indexación en campos TTL está habilitada de forma predeterminada y puede afectar al rendimiento con tasas de tráfico más altas. Te recomendamos que añadas exenciones de un solo campo para tus campos TTL.

    Campos de matrices o mapas grandes

    Los campos de matriz o de mapa grandes pueden acercarse al límite de 40.000 entradas de índice por documento. Si no vas a hacer consultas basadas en un campo de matriz o mapa grande, debes excluirlo de la indexación.

    Si usas consultas con operadores de intervalo y de desigualdad en varios campos, consulta las consideraciones sobre la indexación que debes tener en cuenta para optimizar el rendimiento y el coste de las consultas de Firestore.

    Para obtener más información sobre cómo resolver problemas de indexación (indexación de salida, errores INVALID_ARGUMENT), consulta la página de solución de problemas.