Puedes crear un índice de MongoDB Search en un Ver para transformar documentos y colecciones. Esto permite indexar parcialmente una colección, admitir tipos de datos o modelos de datos incompatibles y mucho más.
The following examples use the sample_mflix and sample_airbnb sample databases.
Nota
Desambiguación
Esta página discute las vistas estándar. Para aprender más sobre las vistas materializadas on-demand, consulte Vistas materializadas On-demand.
Para aprender sobre las diferencias entre los tipos de vistas, se puede consultar Comparación con vistas materializadas on-demand.
Requisitos
Debes usar MongoDB 8.0 o superior.
En MongoDB v8.0+:
Utiliza la interfaz de usuario de Atlas o la API de administración de Atlas para crear índices de MongoDB Search en las vistas.
Ejecuta las queries de MongoDB Search en la colección de origen. Hace referencia al índice de MongoDB Search que se creó en la Vista. Estas queries devuelven los documentos originales tal como aparecen en la colección de origen.
En MongoDB v8.1+, también puedes:
Usar
mongoshy driver métodos,db.collection.createSearchIndex(),db.collection.updateSearchIndex(),db.collection.dropSearchIndex(), y$listSearchIndexespara crear y administrar los índices de Búsqueda de MongoDB en las Vistas.Ejecutar las consultas de MongoDB Search contra la vista.
Para editar una Vista, debes tener el rol de Administrador de Usuario y utilizar el comando collMod comando de base de datos.
Limitaciones
MongoDB Search admite vistas con las siguientes etapas:
Los nombres de los índices deben ser únicos en toda una colección de fuente y todas sus vistas.
MongoDB Search doesn't support view definitions with operators that produce dynamic results, such as the $$USER_ROLES system variable and the
$randaggregation operator.MongoDB Search queries devuelven los documentos originales tal como aparecen en la colección de origen.
To retrieve the transformed document, use the
storedSourceopción.
Permisos requeridos
Para crear una Vista, tu rol debe tener el privilegio de createCollection.
Ejemplos
Los siguientes ejemplos muestran cómo crear una vista, indexar parcialmente documentos y ejecutar consultas sobre el índice. Los ejemplos consultan el índice ejecutando el comando .aggregate contra la colección de origen o la vista. MongoDB Search admite consultas en vista directamente, solo en MongoDB v8.1 o posterior.
Puede filtrar documentos para indexar parcialmente una colección. El siguiente ejemplo crea una Vista sobre la colección sample_mflix.movies para que puedas buscar únicamente películas estrenadas después del 1 de enero de 2000.
Conéctese al clúster usando mongosh.
Para obtener más información, consulte Conéctate a un clúster a través de mongosh.
En Atlas, ve a Clusters página para tu proyecto.
Si aún no se muestra, seleccione la organización que contiene su proyecto deseado en el menú Organizations de la barra de navegación.
Si aún no aparece, selecciona el proyecto deseado en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Clusters en la sección Database.
La página de clústeres se muestra.
En Atlas, vaya a la página Search & Vector Search de su clúster.
Puedes ir a la página de búsqueda de MongoDB desde la opción Search & Vector Search o desde el Data Explorer.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Search & Vector Search en la sección Database.
Si no tienes clústeres, haz clic en Create cluster para crear uno. Para obtener más información, consulte Crear un clúster.
Si el proyecto tiene varios clústeres, se debe seleccionar el clúster que se desea usar en el menú desplegable Select cluster y luego se debe hacer clic en Go to Search.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Data Explorer en la sección Database.
Expanda la base de datos y seleccione la colección.
Haga clic en la pestaña Indexes para la colección.
Haga clic en el enlace Search and Vector Search en el banner.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Se debe iniciar la configuración del índice.
Realiza las siguientes selecciones en la página y luego haz clic en Next.
Search Type | Seleccione el tipo de índice MongoDB Search. |
Index Name and Data Source | Especifique la siguiente información:
|
Configuration Method | For a guided experience, select Visual Editor. To edit the raw index definition, select JSON Editor. |
IMPORTANTE: Tu índice |fts| se llama ``autoembed_index` por defecto. Si estás creando varios índices, te recomendamos que mantengas una convención de nombres coherente y descriptiva en todos tus índices.
Verifique el estado.
El índice recién creado aparece en la pestaña Atlas Search. Mientras se está construyendo el índice, el campo Status muestra Build in Progress. Cuando se termina de construir el índice, el campo Status muestra Active.
IMPORTANTE: Las colecciones más grandes tardan más tiempo en indexarse. Se recibirá una notificación por correo electrónico cuando el índice haya terminado de construirse.
Query el índice parcial releasedAfter2000Index.
[ { "$search": { "index": "releasedAfter2000Index", "text": { "path": "title", "query": "foo" }, "sort": { "released": 1 } } } ]
SCORE: 3.120296001434326 _id: “573a13d2f29313caabd929f8” awards: Object cast: Array (4) countries: Array (1) directors: Array (1) fullplot: "Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-win…" genres: Array (2) imdb: Object languages: Array (1) lastupdated: "2015-08-19 00:00:25.937000000" num_mflix_comments: 0 plot: "Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-win…" poster: "https://m.media-amazon.com/images/M/MV5BMzE4OTczMTgxM15BMl5BanBnXkFtZT…" released: 2011-04-05T00:00:00.000+00:00 runtime: 150 title: "Foo Fighters: Back and Forth" tomatoes: Object type: "movie" year: 2011
Conéctate a tu implementación de MongoDB usando mongosh.
Para obtener más información, consulte Conéctate a un clúster a través de mongosh.
Query el índice parcial releasedAfter2000Index.
Nota
El siguiente ejemplo consulta el índice releasedAfter2000Index ejecutando el comando .aggregate en la Vista denominada movies_ReleasedAfter2000. Si tu clúster está ejecutando MongoDB v8.0, debes query la colección fuente (por ejemplo, movies) utilizando el índice en la Vista. Actualiza a MongoDB v8.1+ para query la Vista directamente.
db.movies_ReleasedAfter2000.aggregate([ { $search: { index: "releasedAfter2000Index", text: { path: "title", query: "foo" }, sort: { released: 1 } } } ])
[ { _id: ObjectId('573a13d2f29313caabd929f8'), plot: "Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-winning sensation on their own. Sixteen years of the band's history comes to life in this documentary, from their demo ...", genres: [ 'Documentary', 'Music' ], runtime: 150, cast: [ 'Shawn Cloninger', 'William Goldsmith', 'Jessy Greene', 'Dave Grohl' ], num_mflix_comments: 0, poster: 'https://m.media-amazon.com/images/M/MV5BMzE4OTczMTgxM15BMl5BanBnXkFtZTcwNTU1NjQxOA@@._V1_SY1000_SX677_AL_.jpg', title: 'Foo Fighters: Back and Forth', fullplot: `Rising from the ashes of Nirvana, the Foo Fighters became a Grammy-winning sensation on their own. Sixteen years of the band's history comes to life in this documentary, from their demo tapes through the creation of their 2011 album, "Wasting Light."`, languages: [ 'English' ], released: ISODate('2011-04-05T00:00:00.000Z'), directors: [ 'James Moll' ], awards: { wins: 1, nominations: 1, text: '1 win & 1 nomination.' }, lastupdated: '2015-08-19 00:00:25.937000000', year: 2011, imdb: { rating: 8.4, votes: 3745, id: 1853563 }, countries: [ 'USA' ], type: 'movie', tomatoes: { viewer: { rating: 4.4, numReviews: 857, meter: 96 }, dvd: ISODate('2011-08-08T00:00:00.000Z'), website: 'http://us.foofightersfilm.com/', production: 'Cinedigm Digital Cinema', lastUpdated: ISODate('2015-09-12T18:42:01.000Z') } } ]
El siguiente ejemplo permite buscar en la colección sample_airbnb.listingsAndReviews alojamientos basados en un nuevo campo totalPrice, que es la suma de los campos price y cleaningFee. Además, dado que MongoDB Search no admite tipos Decimal128, transformamos los valores a Double.
Conéctese al clúster usando mongosh.
Para obtener más información, consulte Conéctate a un clúster a través de mongosh.
En Atlas, ve a la página Clusters de tu proyecto.
Si aún no se muestra, seleccione la organización que contiene su proyecto deseado en el menú Organizations de la barra de navegación.
Si aún no aparece, selecciona el proyecto deseado en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Clusters en la sección Database.
La página de clústeres se muestra.
En Atlas, vaya a la página Search & Vector Search de su clúster.
Puedes ir a la página de búsqueda de MongoDB desde la opción Search & Vector Search o desde el Data Explorer.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Search & Vector Search en la sección Database.
Si no tienes clústeres, haz clic en Create cluster para crear uno. Para obtener más información, consulte Crear un clúster.
Si el proyecto tiene varios clústeres, se debe seleccionar el clúster que se desea usar en el menú desplegable Select cluster y luego se debe hacer clic en Go to Search.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Data Explorer en la sección Database.
Expanda la base de datos y seleccione la colección.
Haga clic en la pestaña Indexes para la colección.
Haga clic en el enlace Search and Vector Search en el banner.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Haz clic en Create Search Index para comenzar con la configuración de tu índice.
Realiza las siguientes selecciones en la página y luego haz clic en Next.
Search Type | Seleccione el tipo de índice MongoDB Search. |
Index Name and Data Source | Especifique la siguiente información:
|
Configuration Method | Seleccione JSON Editor para editar la definición del índice en bruto. |
Verifique el estado.
El índice recién creado aparece en la pestaña Atlas Search. Mientras se está construyendo el índice, el campo Status muestra Build in Progress. Cuando se termina de construir el índice, el campo Status muestra Active.
IMPORTANTE: Las colecciones más grandes tardan más tiempo en indexarse. Se recibirá una notificación por correo electrónico cuando el índice haya terminado de construirse.
Se ejecuta una query en el totalPriceIndex índice .
[ { "$search": { "index": "totalPriceIndex", "range": { "path": "totalPrice", "lte": 300 }, "returnStoredSource": true } } ]
SCORE: 1 _id: "10006546" totalPrice: 115 SCORE: 1 _id: "1001265" totalPrice: 215 SCORE: 1 _id: "10021707" totalPrice: 40 SCORE: 1 _id: "1003530" totalPrice: 270 SCORE: 1 _id: "10038496" totalPrice: 269 SCORE: 1 _id: "10051164" totalPrice: 250 SCORE: 1 _id: "10057447" totalPrice: 50 SCORE: 1 _id: "10057826" totalPrice: 205 SCORE: 1 _id: "10059244" totalPrice: 43 SCORE: 1 _id: "10066928" totalPrice: 140
Conéctate a tu implementación de MongoDB usando mongosh.
Para obtener más información, consulte Conéctate a un clúster a través de mongosh.
Se ejecuta una query en el totalPriceIndex índice .
Nota
El siguiente ejemplo consulta el índice totalPriceIndex ejecutando el comando .aggregate en la Vista denominada listingsAndReviews_totalPrice. Si tu clúster está ejecutando MongoDB v8.0, debes query la colección fuente (por ejemplo, listingsAndReviews) utilizando el índice en la Vista. Actualiza a MongoDB v8.1+ para query la Vista directamente.
db.listingsAndReviews_totalPrice.aggregate([ { $search: { index: "totalPriceIndex", range: { path: "totalPrice", lte: 300 }, returnStoredSource: true } } ])
[ { _id: '10006546', totalPrice: 115 }, { _id: '1001265', totalPrice: 215 }, { _id: '10021707', totalPrice: 40 }, { _id: '1003530', totalPrice: 270 }, { _id: '10038496', totalPrice: 269 }, { _id: '10051164', totalPrice: 250 }, { _id: '10057447', totalPrice: 50 }, { _id: '10057826', totalPrice: 205 }, { _id: '10059244', totalPrice: 43 }, { _id: '10066928', totalPrice: 140 }, { _id: '10082422', totalPrice: 60 }, { _id: '10083468', totalPrice: 40 }, { _id: '10084023', totalPrice: 231 }, { _id: '10091713', totalPrice: 231 }, { _id: '10092679', totalPrice: 58 }, { _id: '10096773', totalPrice: 205 }, { _id: '10112159', totalPrice: 90 }, { _id: '10117617', totalPrice: 55 }, { _id: '10120414', totalPrice: 150 }, { _id: '10133554', totalPrice: 121 } ]
Para indexar campos que coincidan con un patrón de nombres, usa una Vista para transformar los datos de modo que los campos a indexar queden anidados en un subdocumento. Esto te permite utilizar asignaciones dinámicas para la ruta del subdocumento, de modo que puedas buscar automáticamente todos los campos nuevos con el sufijo _type, sin ningún cambio en la definición del índice.
La siguiente View llamada listings_SearchableTypes solo coincide con los nombres de campos que terminan con _type en la colección sample_airbnb.listingsAndReviews. Específicamente, la etapa $set agrega un nuevo campo llamado searchable_types, que contiene los campos filtrados con el término _type en el nombre del campo. El $arrayToObject contiene la entrada del filtro (documento completo) y la condición (coincidencia de regex para _type).
Conéctese al clúster usando mongosh.
Para obtener más información, consulte Conéctate a un clúster a través de mongosh.
Crear una Vista llamada listings_SearchableTypes.
1 db.createView( 2 "listings_SearchableTypes", 3 "listingsAndReviews", 4 [ 5 { 6 "$set": { 7 "searchable_types": { 8 "$arrayToObject": { 9 "$filter": { 10 "input": { "$objectToArray": "$$ROOT" }, 11 "cond": { 12 "$regexMatch": { 13 "input": "$$this.k", 14 "regex": /_type$/ 15 } 16 } 17 } 18 } 19 } 20 } 21 } 22 ] 23 )
En Atlas, ve a la página Clusters de tu proyecto.
Si aún no se muestra, seleccione la organización que contiene su proyecto deseado en el menú Organizations de la barra de navegación.
Si aún no aparece, selecciona el proyecto deseado en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Clusters en la sección Database.
La página de clústeres se muestra.
En Atlas, vaya a la página Search & Vector Search de su clúster.
Puedes ir a la página de búsqueda de MongoDB desde la opción Search & Vector Search o desde el Data Explorer.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Search & Vector Search en la sección Database.
Si no tienes clústeres, haz clic en Create cluster para crear uno. Para obtener más información, consulte Crear un clúster.
Si el proyecto tiene varios clústeres, se debe seleccionar el clúster que se desea usar en el menú desplegable Select cluster y luego se debe hacer clic en Go to Search.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Data Explorer en la sección Database.
Expanda la base de datos y seleccione la colección.
Haga clic en la pestaña Indexes para la colección.
Haga clic en el enlace Search and Vector Search en el banner.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Haz clic en Create Search Index para comenzar con la configuración de tu índice.
Realiza las siguientes selecciones en la página y luego haz clic en Next.
Search Type | Seleccione el tipo de índice MongoDB Search. |
Index Name and Data Source | Especifique la siguiente información:
|
Configuration Method | Seleccione JSON Editor para editar la definición del índice en bruto. |
Edita la definición del índice.
Copia y pega la siguiente definición de índice para reemplazar la definición de índice por defecto en la Interfaz de Usuario:
{ "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "searchable_types": [ { "dynamic": { "typeSet": "tokenTypeSet" }, "type": "document" } ] } }, "typeSets": [ { "name": "tokenTypeSet", "types": [ { "type": "token" } ] } ] }
Verifique el estado.
El índice recién creado aparece en la pestaña Atlas Search. Mientras se está construyendo el índice, el campo Status muestra Build in Progress. Cuando se termina de construir el índice, el campo Status muestra Active.
IMPORTANTE: Las colecciones más grandes tardan más tiempo en indexarse. Se recibirá una notificación por correo electrónico cuando el índice haya terminado de construirse.
Consulta la vista.
La siguiente query busca en la Vista llamada listings_SearchableTypes house con un private room. Para ejecutar esta consulta, copie y pegue la consulta y haga clic en Search:
[ { "$search": { "index": "listingsSearchableTypes", "compound": { "should": [ { "text": { "path": "searchable_types.property_type", "query": "House" } }, { "text": { "path": "searchable_types.room_type", "query": "Private room" } } ] } } } ]
SCORE: 2.0530142784118652 _id: "10051164" name: "Catete's Colonial Big Hause Room B", searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "1016739" name: 'Private Room (2) in Guest House at Coogee Beach', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "10324377" name: 'Suíte em local tranquilo e seguro', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "1073607" name: 'Bright Inner West Terrace Value+', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "1077686" name: 'BALAT', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "10990260" name: 'The Executive Posh Room', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "10992286" name: 'Holoholo Inn: Rain Forest (Priv-2)', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "11396243" name: 'Beautiful Ensuite Room -Easy access to city', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "1145567" name: 'ROOM + ENSUITE INNER CITY MOD HOUSE', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' SCORE: 2.0530142784118652 _id: "11464859" name: 'The Sassy Lilac Megan Love Room', searchable_types: Object property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed'
Conéctate a tu implementación de MongoDB usando mongosh.
Para obtener más información, consulte Conéctate a un clúster a través de mongosh.
Creación de un índice de MongoDB Search en la vista.
La siguiente definición de índice en View llamada listingsSearchableTypes configura un typeSet para indexar automáticamente todos los campos en el documento searchable_types como el tipo string. Si agregas nuevos campos que coincidan con este patrón, MongoDB Search también indexará automáticamente esos campos.
db.listings_SearchableTypes.createSearchIndex( "listingsSearchableTypes", { "analyzer": "lucene.standard", "searchAnalyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "searchable_types": [ { "type": "document", "dynamic": { "typeSet": "tokenTypeSet" } } ] } }, "typeSets": [ { "name": "tokenTypeSet", "types": [ { "type": "token" } ] } ] } )
Se ejecuta una query en el totalPriceIndex índice .
La siguiente query busca en la vista llamada listings_SearchableTypes por house con un private room.
db.listings_SearchableTypes.aggregate([ { "$search": { "index": "listingsSearchableTypes", "compound": { "should": [ { "equals": { "path": "searchable_types.property_type", "value": "House" } }, { "equals": { "path": "searchable_types.room_type", "value": "Private room" } } ] } } }, { "$limit": 10 }, { "$project": { "_id": 0, "searchable_types": 1, "name": 1 } } ])
[ { name: "Catete's Colonial Big Hause Room B", searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'Private Room (2) in Guest House at Coogee Beach', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'Suíte em local tranquilo e seguro', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'Bright Inner West Terrace Value+', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'BALAT', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'The Executive Posh Room', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'Holoholo Inn: Rain Forest (Priv-2)', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'Beautiful Ensuite Room -Easy access to city', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'ROOM + ENSUITE INNER CITY MOD HOUSE', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } }, { name: 'The Sassy Lilac Megan Love Room', searchable_types: { property_type: 'House', room_type: 'Private room', bed_type: 'Real Bed' } } ]
Para realizar una faceta en tipos de campo no compatibles, como booleano, ObjectId o UUID, recomendamos transformar los valores al tipo string.
El siguiente ejemplo crea una vista en el namespace sample_airbnb.listingsAndReviews para que puedas faceta en el campo de tipo boolean host.host_is_superhost y en el campo de tipo objectID _id.
Conéctese al clúster usando mongosh.
Para obtener más información, consulte Conéctate a un clúster a través de mongosh.
En Atlas, ve a la página Clusters de tu proyecto.
Si aún no se muestra, seleccione la organización que contiene su proyecto deseado en el menú Organizations de la barra de navegación.
Si aún no aparece, selecciona el proyecto deseado en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Clusters en la sección Database.
La página de clústeres se muestra.
En Atlas, vaya a la página Search & Vector Search de su clúster.
Puedes ir a la página de búsqueda de MongoDB desde la opción Search & Vector Search o desde el Data Explorer.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Search & Vector Search en la sección Database.
Si no tienes clústeres, haz clic en Create cluster para crear uno. Para obtener más información, consulte Crear un clúster.
Si el proyecto tiene varios clústeres, se debe seleccionar el clúster que se desea usar en el menú desplegable Select cluster y luego se debe hacer clic en Go to Search.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Data Explorer en la sección Database.
Expanda la base de datos y seleccione la colección.
Haga clic en la pestaña Indexes para la colección.
Haga clic en el enlace Search and Vector Search en el banner.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Haz clic en Create Search Index para comenzar con la configuración de tu índice.
Realiza las siguientes selecciones en la página y luego haz clic en Next.
Search Type | Seleccione el tipo de índice MongoDB Search. |
Index Name and Data Source | Especifique la siguiente información:
|
Configuration Method | Seleccione JSON Editor para editar la definición del índice en bruto. |
Edita la definición del índice.
Copia y pega la siguiente definición de índice para reemplazar la definición de índice por defecto en la Interfaz de Usuario:
{ "mappings": { "dynamic": true, "fields": { "idString": { "type": "token" }, "superHostString": { "type": "token" } } } }
La definición de índice anterior indexa los campos idString y superHostString como el tipo token para soportar la creación de facetas en estos campos.
Verifique el estado.
El índice recién creado aparece en la pestaña Atlas Search. Mientras se está construyendo el índice, el campo Status muestra Build in Progress. Cuando se termina de construir el índice, el campo Status muestra Active.
IMPORTANTE: Las colecciones más grandes tardan más tiempo en indexarse. Se recibirá una notificación por correo electrónico cuando el índice haya terminado de construirse.
Query the listingsAndReviews Source Collection.
La siguiente consulta busca en el campo summary ocean view en el índice listings_SearchableTypes. La query recupera el recuento del número de propiedades que pertenecen a cada valor distinto de _id y host.host_is_superhost. Para ejecutar esta consulta, copia y pega la consulta y haz clic en Search:
[{ "$searchMeta": { "index": "listingsSearchableTypes", "facet":{ "operator": { "text": { "path": "summary", "query": "ocean view" } }, "facets": { "idFacet" : { "type" : "string", "path" : "idString", "numBuckets" : 10, }, "hostFacet": { "type" : "string", "path" : "superHostString" } } } } }]
count: Object lowerBound: 510 facet: Object idFacet: Object buckets: Array (10) 0: Object _id: "10082422" count: 1 1: Object _id: "10166986" count: 1 2: Object _id: "10266175" count: 1 3: Object _id: "10267144" count: 1 4: Object _id: "10317142" count: 1 5: Object _id: "10359729" count: 1 6: Object _id: "10392282" count: 1 7: Object _id: "10548991" count: 1 8: Object _id: "1067052" count: 1 9: Object _id: "1069531" count: 1 hostFacet: Object buckets: Array (2) 0: Object _id: "false" count: 370 1: Object _id: "true" count: 140
Conéctate a tu implementación de MongoDB usando mongosh.
Para obtener más información, consulte Conéctate a un clúster a través de mongosh.
Cree una Vista listings_SearchableTypes.
La siguiente vista incluye los dos campos siguientes:
idStringque contiene el valor del campo_iddespués de convertirlo al tipostring.superHostStringque contiene el valor del campohost.host_is_superhostdespués de convertirlo al tipostring.
db.createView( "listings_SearchableTypes", "listingsAndReviews", [ { "$addFields": { "idString": { "$toString": "$_id" }, "superHostString": { "$toString": "$host.host_is_superhost" } } } ] )
Creación de un índice de MongoDB Search en la vista.
La siguiente definición de índice indexa los campos idString y superHostString como el tipo token para habilitar la faceta en estos campos.
db.listings_SearchableTypes.createSearchIndex( "listingsSearchableTypes", { "mappings": { "dynamic": true, "fields": { "idString": { "type": "token" }, "superHostString": { "type": "token" } } } } )
Query el índice parcial listingsSearchableTypes.
La siguiente consulta busca ocean view en el índice listings_SearchableTypes en el campo summary. La query recupera el recuento de propiedades que pertenecen a cada una de las distintas _id y host.host_is_superhost.
db.listings_SearchableTypes.aggregate([{ "$searchMeta": { "index": "listingsSearchableTypes", "facet":{ "operator": { "text": { "path": "summary", "query": "ocean view" } }, "facets": { "idFacet" : { "type" : "string", "path" : "idString", "numBuckets" : 10, }, "hostFacet": { "type" : "string", "path" : "superHostString" } } } } }])
[ { count: { lowerBound: Long('510') }, facet: { idFacet: { buckets: [ { _id: '10082422', count: Long('1') }, { _id: '10166986', count: Long('1') }, { _id: '10266175', count: Long('1') }, { _id: '10267144', count: Long('1') }, { _id: '10317142', count: Long('1') }, { _id: '10359729', count: Long('1') }, { _id: '10392282', count: Long('1') }, { _id: '10548991', count: Long('1') }, { _id: '1067052', count: Long('1') }, { _id: '1069531', count: Long('1') } ] }, hostFacet: { buckets: [ { _id: 'false', count: Long('370') }, { _id: 'true', count: Long('140') } ] } } } ]
Para buscar en campos de tipo decimal128, recomendamos convertir los valores a double.
En el siguiente ejemplo se crea una vista en el namespace sample_airbnb.listingsAndReviews para añadir un campo denominado totalPrice, que contiene la suma del campo price y el campo cleaning_fee después de convertir los valores de estos campos a double.
Conéctese al clúster usando mongosh.
Para obtener más información, consulte Conéctate a un clúster a través de mongosh.
Crear una Vista llamada listings_SearchablePrice.
La siguiente vista incluye un campo llamado totalPrice que contiene la suma del valor de los campos price y cleaning-fee. Antes de añadir los valores de estos campos, el siguiente código convierte los valores de los campos price y cleaning-fee al tipo double.
1 db.createView( 2 "listings_SearchablePrice", 3 "listingsAndReviews", 4 [ 5 { 6 "$addFields": { 7 "totalPrice": { 8 "$add": [ 9 { 10 "$ifNull": [{ "$toDouble": "$price" }, 0] 11 }, 12 { 13 "$ifNull": [{ "$toDouble": "$cleaning_fee" }, 0] 14 } 15 ] 16 } 17 } 18 } 19 ] 20 )
En Atlas, ve a la página Clusters de tu proyecto.
Si aún no se muestra, seleccione la organización que contiene su proyecto deseado en el menú Organizations de la barra de navegación.
Si aún no aparece, selecciona el proyecto deseado en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Clusters en la sección Database.
La página de clústeres se muestra.
En Atlas, vaya a la página Search & Vector Search de su clúster.
Puedes ir a la página de búsqueda de MongoDB desde la opción Search & Vector Search o desde el Data Explorer.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Search & Vector Search en la sección Database.
Si no tienes clústeres, haz clic en Create cluster para crear uno. Para obtener más información, consulte Crear un clúster.
Si el proyecto tiene varios clústeres, se debe seleccionar el clúster que se desea usar en el menú desplegable Select cluster y luego se debe hacer clic en Go to Search.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Si aún no aparece, se debe seleccionar la organización que contiene el proyecto en el menú Organizations de la barra de navegación.
Si aún no se muestra, seleccione su proyecto en el menú Projects de la barra de navegación.
En la barra lateral, haz clic en Data Explorer en la sección Database.
Expanda la base de datos y seleccione la colección.
Haga clic en la pestaña Indexes para la colección.
Haga clic en el enlace Search and Vector Search en el banner.
Aparece la página de Búsqueda y Búsqueda Vectorial.
Haz clic en Create Search Index para comenzar con la configuración de tu índice.
Realiza las siguientes selecciones en la página y luego haz clic en Next.
Search Type | Seleccione el tipo de índice MongoDB Search. |
Index Name and Data Source | Especifique la siguiente información:
|
Configuration Method | Seleccione JSON Editor para editar la definición del índice en bruto. |
Verifique el estado.
El índice recién creado aparece en la pestaña Atlas Search. Mientras se está construyendo el índice, el campo Status muestra Build in Progress. Cuando se termina de construir el índice, el campo Status muestra Active.
IMPORTANTE: Las colecciones más grandes tardan más tiempo en indexarse. Se recibirá una notificación por correo electrónico cuando el índice haya terminado de construirse.
Query la colección de origen.
La siguiente query busca en el índice llamado listingsSearchablePrice propiedades con un costo entre 100 y 200, ambos inclusive. Para ejecutar esta consulta, copia y pega la consulta y haz clic en Search:
[ { "$search": { "index": "listingsSearchablePrice", "range": { "path": "totalPrice", "gte": 100, "lte": 200 } } } ]
SCORE: 1 _id: "10006546" access: "We are always available to help guests. The house is fully available t…" accommodates: 8 address: Object price: 80.00 SCORE: 1 _id: "10066928" access: "Le logement sera disponible en entier pour votre séjour." accommodates: 6 address: Object price: 140.00 SCORE: 1 _id: "10120414" access: "You can access to the rooftop where you have a beautiful view of Empir…" accommodates: 3 address: Object price: 150.00 SCORE: 1 _id: "10133554" access: "We have bathroom,wc,İnternet in rooms and under rooms we have cafe bar…" accommodates: 3 address: Object price: 121.00 SCORE: 1 _id: "10186755" access: "" accommodates: 2 address: Object price: 185.00 SCORE: 1 _id: "10213499" access: "Guests have access to backyard saltwater pool" accommodates: 2 address: Object price: 117.00 SCORE: 1 _id: "1022200" access: "" accommodates: 6 address: Object price: 135.00 SCORE: 1 _id: "10228731" access: "O quarto é privativo, com acesso a todas as acomodações do apartamento…" accommodates: 1 address: Object price: 149.00 SCORE: 1 _id: "10359729" access: "" accommodates: 4 address: Object price: 105.00 SCORE: 1 _id: "1036027" access: "" accommodates: 8 address: Object price: 100.00
Conéctate a tu implementación de MongoDB usando mongosh.
Para obtener más información, consulte Conéctate a un clúster a través de mongosh.
Cree una Vista listings_SearchablePrice.
La siguiente vista incluye un campo llamado totalPrice que contiene la suma del valor de los campos price y cleaning-fee. Antes de añadir los valores de estos campos, el siguiente código convierte los valores de los campos price y cleaning-fee al tipo double.
db.createView( "listings_SearchablePrice", "listingsAndReviews", [ { "$addFields": { "totalPrice": { "$add": [ { "$ifNull": [{ "$toDouble": "$price" }, 0] }, { "$ifNull": [{ "$toDouble": "$cleaning_fee" }, 0] } ] } } } ] )
Query the listingsSearchablePrice index.
La siguiente query busca en el índice denominado listingsSearchablePrice propiedades que cuestan entre 100 y 200, ambos inclusive.
db.listingsAndReviews.aggregate([ { "$search": { "index": "listingsSearchablePrice", "range": { "path": "totalPrice", "gte": 100, "lte": 200 } } }, { "$project": { "_id": 0, "totalPrice": 1, "price": 1, "cleaning_fee": 1 } } ])
[ { price: Decimal128('80.00'), cleaning_fee: Decimal128('35.00') }, { price: Decimal128('140.00') }, { price: Decimal128('150.00') }, { price: Decimal128('121.00') }, { price: Decimal128('185.00') }, { price: Decimal128('117.00'), cleaning_fee: Decimal128('0.00') }, { price: Decimal128('135.00') }, { price: Decimal128('149.00'), cleaning_fee: Decimal128('30.00') }, { price: Decimal128('105.00') }, { price: Decimal128('100.00') }, { price: Decimal128('138.00') }, { price: Decimal128('100.00'), cleaning_fee: Decimal128('80.00') }, { price: Decimal128('112.00'), cleaning_fee: Decimal128('0.00') }, { price: Decimal128('80.00'), cleaning_fee: Decimal128('30.00') }, { price: Decimal128('129.00'), cleaning_fee: Decimal128('60.00') }, { price: Decimal128('112.00') }, { price: Decimal128('100.00'), cleaning_fee: Decimal128('100.00') }, { price: Decimal128('85.00'), cleaning_fee: Decimal128('15.00') }, { price: Decimal128('85.00'), cleaning_fee: Decimal128('40.00') }, { price: Decimal128('135.00'), cleaning_fee: Decimal128('50.00') } ] Type "it" for more
Editar una Vista
El siguiente ejemplo actualiza la vista movies_ReleasedAfter2000 de MongoDB para las películas anteriores a 2000.
db.runCommand( { collMod: "movies_ReleasedAfter2000", viewOn: "movies", "pipeline": [ { $match: { $expr: { $lt: [ "$released", ISODate("2000-01-01T00") ] } } } ] } )
Después de ejecutar este comando, MongoDB Search detecta automáticamente el cambio en la definición de la Vista y realiza la reindexación sin tiempo de inactividad.
Devolver las pipelines para una vista
El siguiente ejemplo retorna las pipelines en la Vista movies_ReleasedAfter2000.
db.getCollectionInfos({ name: "movies_ReleasedAfter2000" })[0].options.pipeline
[ { '$match': { '$expr': { '$gt': [ '$released', ISODate('2000-01-01T00:00:00.000Z') ] } } } ]
Consideraciones sobre el rendimiento
Las transformaciones de vistas altamente complejas pueden aumentar el tiempo de indexación y query. Esto se debe a que el mongod debe leer la definición de vista cuando filtra y transforma las entradas del oplog durante la indexación (sincronización inicial y replicación en estado estable), y cuando aplica esas transformaciones a los documentos devueltos en tiempo de query.
Considera crear una vista materializada para evitar una carga extra de replicación en Atlas. También puedes query la colección de origen directamente para evitar la latencia de queries que se produce con la transformación de la vista.
Solucionar problemas
Los índices cambian a FAILED
Los índices cambian al estado FAILED en los siguientes escenarios:
Creas un índice en una vista que es incompatible con MongoDB Search.
Edita una vista de una manera que no cumple con los requisitos de compatibilidad de MongoDB Search.
Remover o cambiar la colección fuente de una vista.
Por ejemplo, si se crea una vista sobre otra vista y se cambia la fuente de la vista superior a otra colección.
Nota
Esta limitación también se aplica si una Vista es descendiente de otras Vistas. Por ejemplo, no se puede cambiar o remover la colección de origen de la que provienen todos los descendientes.
Los índices cambian a STALE
Los índices cambian al estado STALE en los siguientes escenarios:
Advertencia
Si el pipeline de agregación definido en tu Vista es incompatible con los documentos de la colección, la replicación de búsqueda falla. Por ejemplo, si una expresión $toDouble opera sobre un campo del documento que contiene un arreglo, la replicación falla. Asegúrate de que tu Vista funcione con todos los documentos de la colección sin errores.
Si la definición de la vista provoca un fallo de agregación mientras un índice está
READY, el índice se convierte enSTALE. El índice volverá aREADYdespués de que resuelvas el documento o cambies la definición de vista para que no falle más. CuandoSTALE, el índice sigue siendo consultable. Si el índice se cae del oplog, se activa una reconstrucción del índice.Si la definición de la Vista provoca un fallo en el pipeline de agregación mientras el índice es
BUILDING, la creación de índices queda atascada hasta que soluciones el documento. El índice volverá aREADYdespués de que resuelvas el documento o cambies la definición de vista para que no falle más.
Puedes ver los estados de los índices en la Interfaz de Usuario de Atlas en la página de Detalles del estado del índice.
Error: $search solo es válido como la primera etapa en un pipeline
Este error aparece cuando se hace una query a una vista usando una versión de MongoDB anterior a 8.1.
Si utiliza una versión de MongoDB anterior a la 8.0, le recomendamos que actualice a la 8.1+ para query la vista directamente. Puedes actualizar a 8.0 para query la colección de origen.
Si usas MongoDB 8.0, deberás query el índice de visualización en la colección de origen. Por ejemplo, ejecuta
.aggregate()en la colección en lugar de en la vista.
Proceso de índice
Cuando se crea un índice de MongoDB Search en una vista, el proceso mongot realiza las mismas tareas que cuando se crea un índice de MongoDB Search en una colección normal. El proceso mongot:
Crea índices de MongoDB Search basado en las reglas en la definición del índice para la colección.
Supervisa los flujos de cambio para el estado actual de los documentos e índices de las colecciones para las que hayas definido los índices MongoDB Search.
Procesa consultas de búsqueda de MongoDB Search y devuelve los IDs de los documentos y otros metadatos de búsqueda para los documentos coincidentes a
mongod, que luego realiza una búsqueda completa de documentos y devuelve los resultados al cliente.
Cuando creas un índice de MongoDB Search en una vista, la definición de la vista se aplica durante el paso 1 y el 2, y los documentos transformados se indexan según la definición del índice de búsqueda, y luego se almacenan en disco.
Obtén más información
Para obtener más información sobre las Vistas, consulte Vistas.
Para crear un índice de búsqueda vectorial de MongoDB en una Vista, consulta Usar Vistas con búsqueda vectorial de MongoDB.