{"id":4446,"date":"2018-01-17T10:30:34","date_gmt":"2018-01-17T18:30:34","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4446"},"modified":"2025-06-13T20:59:23","modified_gmt":"2025-06-14T03:59:23","slug":"full-text-search-couchbase-mobile-2-0","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/full-text-search-couchbase-mobile-2-0\/","title":{"rendered":"Presentaci\u00f3n de la b\u00fasqueda de texto completo (FTS) en Couchbase Mobile 2.0"},"content":{"rendered":"<p>Couchbase Mobile 2.0, introduce potentes capacidades de B\u00fasqueda de Texto Completo (FTS) en tus Documentos JSON. Esto es parte de la nueva interfaz de consulta basada en <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/n1ql\/\">N1QL<\/a>el lenguaje de consulta declarativo de Couchbase que extiende SQL para JSON. Si est\u00e1s familiarizado con SQL, te sentir\u00e1s como en casa con la sem\u00e1ntica de la nueva API.<\/p>\n<p>La b\u00fasqueda de texto completo permite realizar consultas en lenguaje natural. Este es el tercero de una serie de posts que discuten la interfaz de consulta en Couchbase Lite. Este blog asume que est\u00e1s familiarizado con los fundamentos, as\u00ed que si a\u00fan no lo has hecho, aseg\u00farate de revisar la secci\u00f3n <a href=\"https:\/\/www.couchbase.com\/blog\/es\/sql-for-json-query-interface-couchbase-mobile\/\">entrada anterior<\/a> primero. Si le interesa, al final de esta entrada encontrar\u00e1 enlaces a blogs en los que se tratan otras caracter\u00edsticas de la interfaz de consulta.<\/p>\n<p>Puede descargar la \u00faltima versi\u00f3n preliminar de Couchbase Mobile 2.0 desde <a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\">aqu\u00ed<\/a>.<\/p>\n<p><!--more--><\/p>\n<h3 id=\"background\">Fondo<\/h3>\n<p>Si estabas usando versiones 1.x de Couchbase Mobile, probablemente est\u00e9s familiarizado con <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/training\/develop\/using-the-database\/index.html#query-documents\">Map-Views<\/a> para crear \u00edndices y consultas. En la versi\u00f3n 2.0, ya no es necesario crear vistas y funciones de mapa. En su lugar, una sencilla interfaz le permite crear \u00edndices y puede utilizar una interfaz Query Builder para construir sus consultas. En comparaci\u00f3n, la nueva interfaz de consulta es m\u00e1s sencilla de utilizar y mucho m\u00e1s potente. Descubriremos algunas de sus caracter\u00edsticas en este post.<\/p>\n<h3 id=\"sampleproject\">Ejemplo de proyecto<\/h3>\n<p>Aunque en los ejemplos que se exponen aqu\u00ed se utiliza Swift para iOS, tenga en cuenta que, salvo algunas peque\u00f1as diferencias, la misma interfaz de consulta es compatible tambi\u00e9n con las plataformas Android y Windows.<\/p>\n<p><strong>As\u00ed que, con unos peque\u00f1os ajustes, deber\u00edas poder reutilizar los ejemplos de consulta de este art\u00edculo cuando trabajes con otras plataformas.<\/strong><\/p>\n<p>Siga las instrucciones siguientes si est\u00e1 interesado en un proyecto Swift de muestra<\/p>\n<ul>\n<li>Clonar el iOS Swift Playground desde GitHub\n<pre><code class=\"bash\">$ git clone https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-api-playground<\/code><\/pre>\n<\/li>\n<li>Siga las instrucciones de instalaci\u00f3n en el <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-api-playground\/blob\/master\/README.md\">L\u00c9AME<\/a> para construir y ejecutar la zona de juegos.<\/li>\n<\/ul>\n<h3 id=\"sampledatamodel\">Modelo de datos de muestra<\/h3>\n<p>Utilizaremos la base de datos de muestras de viajes <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-api-playground\/tree\/master\/travel-sample.cblite2\">aqu\u00ed<\/a>. Puede incrustar esta base de datos preconstruida en su aplicaci\u00f3n m\u00f3vil y empezar a utilizarla para sus consultas.<\/p>\n<p>El conjunto de datos de la muestra incluye varios tipos de documentos identificados por el <code>tipo<\/code> del documento. Nos centraremos en documentos de <code>tipo<\/code> <em>\"hito\"<\/em> . A continuaci\u00f3n se muestra el modelo de documento JSON. Por brevedad, hemos omitido algunas de las propiedades que no son relevantes para este post del modelo a continuaci\u00f3n.<\/p>\n<pre><code class=\"json\"> {\r\n        \"activity\": \"see\",\r\n        \"address\": \"84 rue Claude Monet\",\r\n        \"alt\": \"Fondation Claude Monet\",\r\n        \"city\": \"Giverny\",\r\n        \"content\": \"the house is quietly eccentric and highly interesting in an Orient-influenced style, and includes Monet's collection of [https:\/\/www.intermonet.com\/japan\/ Japanese prints]. There are no original Monet paintings on the site - the real drawcard, is the gardens around the house ...\",\r\n        \"country\": \"France\",\r\n        \"directions\": null,\r\n        \"email\": null,\r\n        \"geo\": {\r\n            \"accuracy\": \"ROOFTOP\",\r\n            \"lat\": 49.0753489,\r\n            \"lon\": 1.5337884\r\n        },\r\n        \"hours\": \"open April-October Mo-Su 9:30-18:00\",\r\n        \"id\": 10061,\r\n        \"image\": null,\r\n        \"name\": \"Monet's House\",\r\n        \"phone\": \"+33 232512821\",\r\n        \"price\": \"\u20ac9, $5 students, \u20ac4 4.00 disabled, under-7s free\",\r\n        \"state\": \"Haute-Normandie\",\r\n        \"title\": \"Giverny\",\r\n        \"tollfree\": null,\r\n        \"type\": \"landmark\",\r\n        \"url\": \"https:\/\/www.fondation-monet.com\/\"\r\n}<\/code><\/pre>\n<p>** Consulte el modelo anterior para cada uno de los ejemplos de consulta a continuaci\u00f3n. **<\/p>\n<h3 id=\"thedatabasehandle\">El asa de la base de datos<\/h3>\n<p>En las consultas siguientes, utilizaremos la funci\u00f3n <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/guides\/couchbase-lite\/native-api\/database\/index.html\"><code>Base de datos<\/code><\/a> API para abrir\/crear Base de Datos CouchbaseLite.<\/p>\n<pre><code class=\"swift\">  var options =  DatabaseConfiguration()\r\n  let db = try Database(name: kDBName, config: options)<\/code><\/pre>\n<h3 id=\"thebasics\">Conceptos b\u00e1sicos<\/h3>\n<p>La b\u00fasqueda de texto completo permite realizar consultas en lenguaje natural. En nuestro post sobre la <a href=\"https:\/\/www.couchbase.com\/blog\/es\/sql-for-json-query-interface-couchbase-mobile\/\">Fundamentos de la consulta<\/a>discutimos el <em>como<\/em> y <em>regex<\/em> para operaciones de concordancia de patrones. FTS supera esa capacidad al permitir la compatibilidad con <em>de origen<\/em>, <em>clasificaci\u00f3n por relevancia <\/em>y <em>consultas en lenguaje natural espec\u00edficas de la localidad<\/em>.<\/p>\n<p>Las b\u00fasquedas de texto completo son <strong>no distingue may\u00fasculas de min\u00fasculas<\/strong> y utilizar el <code>match<\/code> expresi\u00f3n de consulta. Para realizar FTS, debe crear <em>\u00cdndice de texto completo<\/em> en las propiedades apropiadas. Puede crear \u00edndices en una o varias propiedades.<\/p>\n<h3 id=\"stemming\">Stemming<\/h3>\n<p>Antes de pasar a los ejemplos, hablemos de la separaci\u00f3n de palabras. Se trata de reducir las palabras a su ra\u00edz. As\u00ed, para <a href=\"https:\/\/en.wikipedia.org\/wiki\/Stemming\">instancia<\/a>\"gatuno\", \"gatuno\" y \"gatos\" se reducen a la palabra \"gato\". As\u00ed, la b\u00fasqueda del t\u00e9rmino \"gatos\" nos dar\u00eda resultados que coincidir\u00edan con \"gatuno\", \"gatuno\" y as\u00ed sucesivamente.<\/p>\n<p>Couchbase Lite actualmente soporta Stemming en los siguientes idiomas<br \/>\n* danish<br \/>\n* dutch<br \/>\n* espa\u00f1ol<br \/>\n* finland\u00e9s<br \/>\n* franc\u00e9s<br \/>\n* alem\u00e1n<br \/>\n* h\u00fangaro<br \/>\n* italiano<br \/>\n* noruego<br \/>\n* portugu\u00e9s<br \/>\n* rumano<br \/>\n* ruso<br \/>\n* espa\u00f1ol<br \/>\n* sueco<br \/>\n* turco<\/p>\n<p>Si no se utiliza ning\u00fan idioma espec\u00edfico, el tokenizador seguir\u00e1 dividiendo el texto en palabras a partir de los caracteres Unicode de espacio en blanco. As\u00ed que deber\u00eda funcionar, aunque menos bien, con cualquier idioma que ponga espacios entre palabras.<\/p>\n<h3 id=\"fulltextindex\">\u00cdndice de texto completo<\/h3>\n<p>En <code>nombre<\/code> que se asocia al \u00edndice durante la creaci\u00f3n es importante. Los ejemplos de consulta que veremos m\u00e1s adelante har\u00e1n referencia al \u00edndice apropiado mediante el nombre<\/p>\n<h4 id=\"singlepropertyindex\">\u00cdndice de propiedades individuales<\/h4>\n<p>El siguiente ejemplo crea un <code>fullTextIndex<\/code> en el <em>\"contenido\"<\/em> propiedad de un <code>Documento<\/code>. El \"stemming\" est\u00e1 activado por defecto y se asume que la configuraci\u00f3n regional es la del dispositivo. Aunque no se muestra a continuaci\u00f3n, tambi\u00e9n tiene la opci\u00f3n de especificar si los \"acentos\" deben ignorarse o no mediante la opci\u00f3n <code>ignoreAccents<\/code> opci\u00f3n. Por defecto, los acentos no se ignoran.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\"> let ftsIndex = IndexBuilder.fullTextIndex(items: FullTextIndexItem.property(\"content\"))\r\n try db.createIndex(ftsIndex,withName: \"ContentFTSIndex\")<\/pre>\n<h4 id=\"multiplespropertyindex\">\u00cdndice de propiedades m\u00faltiples<\/h4>\n<p>El siguiente ejemplo crea un <code>fullTextIndex<\/code> en <em>\"contenido\"<\/em> y <em>\"nombre\"<\/em> propiedades de un <code>Documento<\/code><\/p>\n<pre class=\"wrap:true lang:swift decode:true\">  let ftsIndex = IndexBuilder.fullTextIndex(items: FullTextIndexItem.property(\"content\"),FullTextIndexItem.property(\"name\"))\r\n  try db.createIndex(ftsIndex,withName: \"ContentAndNameFTSIndex\")<\/pre>\n<h4 id=\"indexwithoutstemming\">\u00cdndice sin stemming<\/h4>\n<p>El siguiente ejemplo crea un <code>fullTextIndex<\/code> en el <em>\"contenido\"<\/em> propiedad de un <code>Documento<\/code> con el stemming desactivado. El stemming se activa por defecto utilizando la configuraci\u00f3n actual del idioma del dispositivo. Si el idioma es nulo, se desactiva el stemming.<\/p>\n<pre class=\"wrap:true lang:swift decode:true\">  let ftsIndex = IndexBuilder.fullTextIndex(items: FullTextIndexItem.property(\"content\")).language(nil)\r\n  try db.createIndex(ftsIndex,withName: \"ContentFTSIndexNoStemming\")<\/pre>\n<h3 id=\"ftssearchwithstemming\">B\u00fasqueda FTS con stemming<\/h3>\n<p>La siguiente consulta recupera los <em>id<\/em> y <em>contenido<\/em> propiedades de <em>\"hito\"<\/em> <code>tipo<\/code> documentos que contengan el t\u00e9rmino <em>\"Mec\u00e1nica\"<\/em> en el <em>\"contenido\"<\/em> propiedad. Utilizamos la <em>\"ContentFTSIndex\"<\/em> que se cre\u00f3 anteriormente.<\/p>\n<h4 id=\"request\">Solicitar<\/h4>\n<pre class=\"wrap:true lang:swift decode:true\"> let ftsExpression = FullTextExpression.index(\"ContentFTSIndex\")\r\n let searchQuery = QueryBuilder\r\n        .select(SelectResult.expression(Meta.id),\r\n                SelectResult.expression(Expression.property(\"content\")))\r\n        .from(DataSource.database(db))\r\n        .where(\r\nExpression.property(\"type\").equalTo(Expression.string (\"landmark\"))\r\n            .and( ftsExpression.match(\"Mechanical\")))\r\n        .limit(Expression.int(limit))<\/pre>\n<h4 id=\"sampleresponse\">Muestra de respuesta<\/h4>\n<p>La respuesta a la consulta anterior incluir\u00e1 documentos que contengan los t\u00e9rminos \"mec\u00e1nico\", \"mecanismo\", \"mecanismos\", \"mec\u00e1nico\", etc.<\/p>\n<pre><code class=\"json\">[\r\n  {\r\n    \"id\": \"landmark_21703\",\r\n    \"content\": \"The Swiss luxury watch manufacturer, founded in 1851, is known for precise mechanics.\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_2592\",\r\n    \"content\": \"Here you can see the mechanisms that drive San Francisco's famed cable cars, as well as plenty of cable car memorabilia and information on the history of the cable cars.\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_26144\",\r\n    \"content\": \"This scenic section of the Golden Gate National Recreation Area is a favorite for hikers, bikers and beach-goers, with rugged coastal highlands and deep sand dunes. Hang gliding is quite popular here, with several shops for hang gliders in the area. Nearby is the remnants of Battery Davis, a WWII-era military defense mechanism.\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_33234\",\r\n    \"content\": \"Western-style steakhouse features a huge, \u2018country\u2019 bar and even a mechanical bull for those ready for a faux bull-riding adventure. The menu is vast and surprisingly inexpensive. And again, the saloon is a longtime trendy destination along the Sunset Strip for raucous good times.\"\r\n  }\r\n]\r\n<\/code><\/pre>\n<h3 id=\"ftssearchwithoutstemming\">B\u00fasqueda FTS <em>sin<\/em> Stemming<\/h3>\n<p>La siguiente consulta recupera los <em>id<\/em> y <em>contenido<\/em> propiedades de <em>\"hito\"<\/em> <code>tipo<\/code> documentos que contienen el t\u00e9rmino exacto <em>\"Mec\u00e1nica\"<\/em> en el <em>\"contenido\"<\/em> propiedad. Utilizamos la <em>\"ContenidoFTSIndexNoStemming\"<\/em> que se cre\u00f3 anteriormente y que especificaba la opci\u00f3n de desactivar el stemming.<\/p>\n<h4 id=\"request\">Solicitar<\/h4>\n<pre class=\"wrap:true lang:swift decode:true\">  let ftsExpression = FullTextExpression.index(\"ContentFTSIndexNoStemming\")\r\n  let searchQuery = QueryBuilder\r\n        .select(SelectResult.expression(Meta.id),\r\n                SelectResult.expression(Expression.property(\"content\")))\r\n        .from(DataSource.database(db))\r\n .where(Expression.property(\"type\").equalTo(Expression.string (\"landmark\"))\r\n            .and( ftsExpression.match(\"Mechanical\")))\r\n        .limit(Expression.int(limit))\r\n<\/pre>\n<h4 id=\"sampleresponse\">Muestra de respuesta<\/h4>\n<p>La respuesta a la consulta anterior incluir\u00e1 documentos que contengan exactamente el t\u00e9rmino \"mec\u00e1nico\". Tenga en cuenta de nuevo que todas las b\u00fasquedas son insensibles a may\u00fasculas y min\u00fasculas.<\/p>\n<pre><code class=\"json\">[\r\n  {\r\n    \"id\": \"landmark_33234\",\r\n    \"content\": \"Western-style steakhouse features a huge, \u2018country\u2019 bar and even a mechanical bull for those ready for a faux bull-riding adventure. The menu is vast and surprisingly inexpensive. And again, the saloon is a longtime trendy destination along the Sunset Strip for raucous good times.\"\r\n  }\r\n]\r\n<\/code><\/pre>\n<h3 id=\"ftssearchonmultipleproperties\">B\u00fasqueda FTS en varias propiedades<\/h3>\n<p>La siguiente consulta recupera los <em>id<\/em> , <em>nombre<\/em> y <em>contenido<\/em> propiedades de <em>\"hito\"<\/em> <code>tipo<\/code> documentos que contengan el t\u00e9rmino <em>\"Mec\u00e1nica\"<\/em> en el <em>\"nombre\"<\/em> o el <em>\"contenido\"<\/em> propiedad. Utilizamos la <em>\"ContentAndNameFTSIndex\"<\/em> creado anteriormente. Este \u00edndice permit\u00eda indexar el <em>\"nombre\"<\/em> y <em>\"contenido\"<\/em> propiedades<\/p>\n<h4 id=\"request\">Solicitar<\/h4>\n<pre class=\"wrap:true lang:swift decode:true\"> let ftsExpression = FullTextExpression.index(\"ContentAndNameFTSIndex\")\r\n let searchQuery = QueryBuilder\r\n        .select(SelectResult.expression(Meta.id),\r\n                SelectResult.expression(Expression.property(\"name\")),\r\n                SelectResult.expression(Expression.property(\"content\")))\r\n        .from(DataSource.database(db))\r\n .where(Expression.property(\"type\").equalTo(Expression.string (\"landmark\"))\r\n            .and( ftsExpression.match(\"Mechanical\")))\r\n        .limit(Expression.int(limit))<\/pre>\n<h4 id=\"sampleresponse\">Muestra de respuesta<\/h4>\n<p>La respuesta a la consulta anterior incluir\u00e1 los documentos que contengan el t\u00e9rmino \"mec\u00e1nico\" (o sus variantes derivadas por stemming) en la propiedad \"nombre\" o \"contenido\".<\/p>\n<pre><code class=\"json\">[\r\n  {\r\n    \"id\": \"landmark_10062\",\r\n    \"name\": \"Natural Mechanical Museum\",\r\n    \"content\": \"Founded by the Guillemard brothers: Jean-pierre, Ren\u00e9 and G\u00e9rard currently run restorations and exhibitions with the help of an enthusiasts team who devoted their time and known-how to the Patrimony preservation. The museum origin is a private collection of steam internal combustion engines; founded in 1955 by the Guillemard family a GIVERNY residents since generations.\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_21703\",\r\n    \"name\": \"Patek Philippe Salons\",\r\n    \"content\": \"The Swiss luxury watch manufacturer, founded in 1851, is known for precise mechanics.\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_25929\",\r\n    \"name\": \"Cable Car Museum\",\r\n    \"content\": \"Here you can see the mechanisms that drive San Francisco's famed cable cars, as well as plenty of cable car memorabilia and information on the history of the cable cars\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_26144\",\r\n    \"name\": \"Fort Funston\",\r\n    \"content\": \"This scenic section of the Golden Gate National Recreation Area is a favorite for hikers, bikers and beach-goers, with rugged coastal highlands and deep sand dunes. Hang gliding is quite popular here, with several shops for hang gliders in the area. Nearby is the remnants of Battery Davis, a WWII-era military defense mechanism\"\r\n  }\r\n]\r\n<\/code><\/pre>\n<h3 id=\"ftssearchwithlogicalexpressions\">B\u00fasqueda FTS con expresiones l\u00f3gicas<\/h3>\n<p>En un ejemplo anterior, has visto que desactivando el stemming, puedes buscar la cadena de b\u00fasqueda exacta. Pero, \u00bfy si quiere buscar m\u00e1s de un t\u00e9rmino de b\u00fasqueda? En <code>match<\/code> acepta expresiones l\u00f3gicas como AND y OR.<\/p>\n<p>La siguiente consulta recupera los <em>id<\/em> y <em>contenido<\/em> propiedades de <em>\"hito\"<\/em> <code>tipo<\/code> documentos que contengan el t\u00e9rmino <em>\"Mec\u00e1nica\"<\/em> o <em>\"Mecanismo\"<\/em> en el <em>\"contenido\"<\/em> propiedad. Utilizamos la <em>\"ContenidoFTSIndexNoStemming\"<\/em> que se cre\u00f3 anteriormente para desactivar el stemming.<\/p>\n<h4 id=\"request\">Solicitar<\/h4>\n<pre class=\"wrap:true lang:swift decode:true\">let ftsExpression = FullTextExpression.index(\"ContentFTSIndexNoStemming\")\r\nlet searchQuery = QueryBuilder\r\n        .select(SelectResult.expression(Meta.id),\r\n                SelectResult.expression(Expression.property(\"content\")))\r\n        .from(DataSource.database(db))\r\n .where(Expression.property(\"type\").equalTo(Expression.string (\"landmark\"))\r\n            .and( ftsExpression.match(\"Mechanical OR Mechanism\")))\r\n        .limit(Expression.int(limit))<\/pre>\n<h4 id=\"sampleresponse\">Muestra de respuesta<\/h4>\n<p>La respuesta a la consulta anterior incluir\u00e1 los documentos que contengan exactamente los t\u00e9rminos \"mec\u00e1nico\" o \"mecanismo\" en la propiedad \"contenido\".<\/p>\n<pre><code class=\"json\">[\r\n  {\r\n    \"id\": \"landmark_26144\",\r\n    \"content\": \"This scenic section of the Golden Gate National Recreation Area is a favorite for hikers, bikers and beach-goers, with rugged coastal highlands and deep sand dunes. Hang gliding is quite popular here, with several shops for hang gliders in the area. Nearby is the remnants of Battery Davis, a WWII-era military defense mechanism\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_33234\",\r\n    \"content\": \"Western-style steakhouse features a huge, \u2018country\u2019 bar and even a mechanical bull for those ready for a faux bull-riding adventure. The menu is vast and surprisingly inexpensive. And again, the saloon is a longtime trendy destination along the Sunset Strip for raucous good times.\"\r\n  }\r\n]\r\n<\/code><\/pre>\n<h3 id=\"ftssearchwithwilcardexpression\">B\u00fasqueda FTS con expresi\u00f3n Wilcard<\/h3>\n<p>Puede utilizar el car\u00e1cter \"*\" en la cadena de b\u00fasqueda para representar coincidencias de cero o m\u00e1s caracteres.<\/p>\n<p>La siguiente consulta recupera los <em>id<\/em> y <em>contenido<\/em> propiedades de <em>\"hito\"<\/em> <code>tipo<\/code> documentos que contengan el t\u00e9rmino <em>\"walt*\"<\/em> en el <em>\"contenido\"<\/em> propiedad. Esto coincidir\u00e1 con todos los t\u00e9rminos de b\u00fasqueda que empiecen por \"walt\" seguido de cero o m\u00e1s caracteres. Utilizamos la propiedad <em>\"ContentFTSIndex\"<\/em> que se cre\u00f3 anteriormente.<\/p>\n<p><em>NOTA<\/em>: Se podr\u00eda argumentar que el uso de comodines en el t\u00e9rmino de b\u00fasqueda podr\u00eda ser una forma ingenua de aplicar la derivaci\u00f3n. Pero entonces se puede acabar con formas derivadas que pueden no corresponder a los t\u00e9rminos derivados mediante stemming. As\u00ed que es preferible utilizar stemming si eso es lo que necesita.<\/p>\n<h4 id=\"request\">Solicitar<\/h4>\n<pre class=\"wrap:true lang:swift decode:true\">let ftsExpression = FullTextExpression.index(\"ContentFTSIndex\")\r\nlet searchQuery = QueryBuilder\r\n        .select(SelectResult.expression(Meta.id),\r\n                SelectResult.expression(Expression.property(\"content\")))\r\n        .from(DataSource.database(db))\r\n .where(Expression.property(\"type\").equalTo(Expression.string (\"landmark\"))\r\n        .and( ftsExpression.match(\"walt*\")))\r\n        .limit(Expression.int(limit))<\/pre>\n<h4 id=\"sampleresponse\">Muestra de respuesta<\/h4>\n<p>La respuesta a la consulta anterior incluir\u00e1 documentos que contengan los t\u00e9rminos \"walt\", \"Walter\", \"Waltham\", \"Walthamstow\", etc.<\/p>\n<pre><code class=\"json\">[\r\n  {\r\n    \"id\": \"landmark_10134\",\r\n    \"content\": \"On the Ibrox tour, you get access to the home dressing room and hear a recorded message from Walter Smith and Ally McCoist before climbing the marble staircase, visit the illustrious trophy room, the blue room and the managers office. Tickets, except for matches against Celtic, are available online from the clubs website, ticket centre at the stadium and club outlets at JJB Sports Stores in Glasgow city centre.\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_16104\",\r\n    \"content\": \"Presents the history of Waltham Forest.  The building was constructed to be a work house and has since been used as a police station and a private home.  Its collection includes the Bremer car, built by engineer Frederick Bremer in 1892 it has a claim to being this first petrol-driven car made in Britain.\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_16105\",\r\n    \"content\": \"The ancient nucleus of present day Walthamstow centred around the 12 th century St.Marys Church \"\r\n  },\r\n  {\r\n    \"id\": \"landmark_16574\",\r\n    \"content\": \"Impressive hall architecture complete with tours most days.The Dorothy Chandler Pavilion is open to the public Christmas Eve day with almost round the clock performances by amateur cultural arts groups.The Walt Disney Hall has daily tours ,check website for schedules.\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_8631\",\r\n    \"content \": \"Museum about famous Scottish authors, focussing on Robert Burns, Sir Walter Scott and Robert Louis Stevenson \"\r\n  }\r\n]\r\n<\/code><\/pre>\n<h3 id=\"ftssearchwithstopwords\">B\u00fasqueda FTS con palabras clave<\/h3>\n<p>Las stop words son palabras comunes en un idioma. En ingl\u00e9s, ser\u00edan t\u00e9rminos como \"the\", \"is\", \"and\" , \"which\", etc.<\/p>\n<h4 id=\"example1:searchstringcontainsstopwords\">Ejemplo 1: La cadena de b\u00fasqueda contiene palabras vac\u00edas<\/h4>\n<p>Couchbase Lite ignora las palabras de parada que aparecen en la cadena de b\u00fasqueda.<\/p>\n<p>La siguiente consulta recupera los <em>id<\/em> y <em>contenido<\/em> propiedades de <em>\"hito\"<\/em> <code>tipo<\/code> documentos que contengan el t\u00e9rmino <em>\"en la historia\"<\/em> en el <em>\"contenido\"<\/em> propiedad. Utilizamos la <em>\"ContentFTSIndex\"<\/em> que se cre\u00f3 anteriormente.<\/p>\n<p>Couchbase Lite ignora las palabras de parada \"on\" y \"the\", por lo que obtendr\u00e1 documentos que s\u00f3lo incluyan el t\u00e9rmino \"history\" y las formas derivadas de la palabra ra\u00edz<\/p>\n<p>Solicitar<\/p>\n<pre class=\"wrap:true lang:swift decode:true\"> let ftsExpression = FullTextExpression.index(\"ContentFTSIndex\")\r\n let searchQuery = QueryBuilder.select(SelectResult.expression(Meta.id),\r\n        SelectResult.expression(Expression.property(\"content\")))\r\n        .from(DataSource.database(db))\r\n .where(Expression.property(\"type\").equalTo(Expression.string (\"landmark\"))\r\n        .and( ftsExpression.match(\"on the history\")))\r\n        .limit(Expression.int(limit))<\/pre>\n<h5 id=\"sampleresponse\">Muestra de respuesta<\/h5>\n<p>La respuesta a la consulta anterior incluir\u00e1 los documentos que contengan los t\u00e9rminos \"historia\" y las formas derivadas de esta palabra, como \"hist\u00f3rico\".<\/p>\n<pre><code class=\"json\">[\r\n  {\r\n    \"id\": \"landmark_10019\",\r\n    \"content\": \"Museum on military engineering and the history of the British Empire. A quite extensive collection that takes about half a day to see. Of most interest to fans of British and military history or civil engineering.\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_10083\",\r\n    \"content\": \" Tours take about 45 min. In front the building, George Square, the citys notional centre, is populated by several statues of civic leaders and famous figures from history and is often used for outdoor events.\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_10093\",\r\n    \"content\": \"The auditorium has now garnered some world fame for being the place where the Susan Boyle audition - one of the most downloaded YouTube video clips in history - was filmed.\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_10101\",\r\n    \"content\": \"This museum has a large collection of artifacts and exhibits showcasing the history of the city. If you don't want to pay to enter the museum itself, you can just walk into the building (which contains three separate museums) and look at some historical photographs on the walls of the atrium.\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_10105\",\r\n    \"content\": \"The Peoples Palace is a great folk museum, telling the history of Glasgow and its people, from various perspectives, displaying details of Glasgow life (including one of Billy Connolly's banana boots). The Winter Gardens, adjacent, is a pleasant greenhouse with a reasonable cafe.)\"\r\n  }\r\n]\r\n<\/code><\/pre>\n<h4 id=\"example2:ignoringstopwordswhilesearching\">Ejemplo 2: Ignorar las palabras vac\u00edas en la b\u00fasqueda<\/h4>\n<p>Por defecto, Couchbase Lite ignora las palabras de parada dentro del contenido de la b\u00fasqueda.<\/p>\n<p>La siguiente consulta recupera los <em>id<\/em> y <em>contenido<\/em> propiedades de <em>\"hito\"<\/em> <code>tipo<\/code> documentos que contengan los t\u00e9rminos <em>\"aleta azul aleta amarilla\"<\/em> en el <em>\"contenido\"<\/em> propiedad. Utilizamos la <em>\"ContentFTSIndex\"<\/em> que se cre\u00f3 anteriormente.<\/p>\n<p>Couchbase Lite ignora las palabras de parada durante la b\u00fasqueda, por lo que obtendr\u00eda documentos que incluyeran los t\u00e9rminos \"azul\", \"aleta\" y \"amarillo\" en ese orden, separados por cualquier n\u00famero de palabras de parada.<\/p>\n<h5 id=\"request\">Solicitar<\/h5>\n<pre class=\"wrap:true lang:swift decode:true\">let ftsExpression = FullTextExpression.index(\"ContentFTSIndex\")\r\nlet searchQuery = QueryBuilder.select(SelectResult.expression(Meta.id),\r\n       SelectResult.expression(Expression.property(\"content\")))\r\n       .from(DataSource.database(db))\r\n .where(Expression.property(\"type\").equalTo(Expression.string (\"landmark\"))\r\n         .and( ftsExpression.match(\"blue fin yellow fin\")))\r\n        .limit(Expression.int(limit))<code class=\"swift\"><\/code><\/pre>\n<h5 id=\"sampleresponse\">Muestra de respuesta<\/h5>\n<p>La respuesta a la consulta anterior incluir\u00e1 documentos que contengan los t\u00e9rminos \"azul\", \"aleta\" y \"amarillo\" separados por cualquier n\u00famero de palabras de parada, como \"aleta azul y aleta amarilla\".<\/p>\n<pre><code class=\"json\">[\r\n  {\r\n    \"id\": \"landmark_18840\",\r\n    \"content\": \"This large aquarium specializes in exhibiting local sea life in typical local habitat displays, and has many spectacular exhibits. It is particularly known for its Kelp Forest exhibit, three stories high, filled with several varieties of giant kelp and a wide variety of marine animal species, and also for its million-gallon Open Sea exhibit with large blue fin and yellow fin tunas, mahi-mahis, sharks (including an occasional Great White Shark as a very temporary visitor, before being released back to the ocean), ocean sunfish (mola-molas) and sea turtles. The best exhibits include a large tank of silver sardines that swim around and around above one's head, and one of rescued sea otters deemed unreturnable to the wild and therefore kept at the aquarium.  )\"\r\n  }\r\n]\r\n<\/code><\/pre>\n<h3 id=\"ftssearchwithranking\">B\u00fasqueda FTS con clasificaci\u00f3n<\/h3>\n<p>Puede utilizar la funci\u00f3n <code>Funci\u00f3nTextoCompleto.rank<\/code> para especificar el orden de clasificaci\u00f3n de los resultados de la b\u00fasqueda. Esto es \u00fatil para clasificar las coincidencias por orden de mejor coincidencia.<\/p>\n<p>La siguiente consulta recupera los <em>id<\/em> y <em>contenido<\/em> propiedades de <em>\"hito\"<\/em> <code>tipo<\/code> documentos que contengan el t\u00e9rmino <em>\"atraer\"<\/em> en el <em>\"contenido\"<\/em> propiedad. Los documentos se ordenan en orden descendente seg\u00fan su rango, lo que significa que el documento con el mayor n\u00famero de coincidencias se ordena por encima del resto.<\/p>\n<h5 id=\"request\">Solicitar<\/h5>\n<pre class=\"wrap:true lang:swift decode:true\">let ftsExpression = FullTextExpression.index(\"ContentFTSIndexNoStemming\")\r\nlet searchQuery = QueryBuilder.select(SelectResult.expression(Meta.id),\r\n     SelectResult.expression(Expression.property(\"content\")))\r\n        .from(DataSource.database(db))\r\n .where(Expression.property(\"type\").equalTo(Expression.string (\"landmark\"))\r\n        .and( ftsExpression.match(\"attract\")))\r\n        .orderBy(Ordering.expression(FullTextFunction.rank(\"ContentFTSIndexNoStemming\")).descending())\r\n        .limit(Expression.int(limit))<\/pre>\n<h5 id=\"sampleresponse\">Muestra de respuesta<\/h5>\n<p>La respuesta a la consulta anterior incluir\u00e1 los documentos que incluyan el t\u00e9rmino <em>\"atraer\"<\/em> o sus versiones derivadas. Los documentos con el mayor n\u00famero de coincidencias se clasifican en orden superior.<\/p>\n<pre><code class=\"json\">[\r\n  {\r\n    \"id\": \"landmark_22056\",\r\n    \"content\": \"Top paid-for visitor attraction in Wales including a farm, indoor vintage funfair, zoo and indoor and outdoor adventure play. All-weather family attraction with 50% of attractions undercover.\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_16309\",\r\n    \"content\": \"The London Bridge Experience and London Tombs are two scare attractions for one price and have been voted the UK's Best Year Round Scare Attraction for three years running.\"\r\n  },\r\n  {\r\n    \"id\": \"landmark_25216\",\r\n    \"content\": \"TA seaside amusement park located near the southern end of Mission Beach, Belmont Park is a landmark with a number of shops, restaurants, an arcade, and a bunch of rides. The big attraction is the Giant Dipper, a historic roller coaster that is one of the only two remaining oceanfront roller coasters still operating on the west coast. Among the other rides is a FlowRider (a simulated wave attraction which you can bodyboard on), an antique carousel, bumper cars, slides, pendulum rides, tilt-a-whirl, and a trampoline \"\r\n  },\r\n  {\r\n    \"id\": \"landmark_1059\",\r\n    \"content\": \"Aims to tell the history of flight throughout the 20th Century, and has a large collection of aircraft, including British Airways Concorde G-BOAA.  Another rather good attraction (and well worth the look) is the De-Havilland Comet 4C, a derivative of the Worlds first jetliner.\"\r\n  }\r\n]\r\n<\/code><\/pre>\n<h3 id=\"limitations\">Limitaciones<\/h3>\n<p>Aunque la capacidad de FTS en Couchbase Lite 2.0 es extremadamente potente y ser\u00eda suficiente para los casos de uso t\u00edpicos en una base de datos integrada, hay algunas limitaciones<\/p>\n<ul>\n<li>La expresi\u00f3n de coincidencia s\u00f3lo puede estar en el nivel superior o en la expresi\u00f3n AND del nivel superior. Esto significa que la siguiente expresi\u00f3n no est\u00e1 permitida\u00a0<span style=\"color: #222222;font-family: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace;font-size: 15px;background-color: #e9ebec\">ftsExpression.match(\"atraer\").or(ftsExpression2.match(\"museo\"))<\/span><\/li>\n<\/ul>\n<ul>\n<li>Tokenizadores ling\u00fc\u00edsticos personalizados<br \/>\nLa lista de idiomas soportados se especific\u00f3 anteriormente. En el momento de escribir este post, no es posible conectar un tokenizador personalizado para ampliar la compatibilidad a otros idiomas.<\/li>\n<li>\u00a0Soporte de b\u00fasqueda difusa<br \/>\nNo podemos especificar un factor de \"imprecisi\u00f3n\" en la consulta que pueda dar lugar a que se consideren coincidencias menos relevantes.<\/li>\n<li>\u00a0Facetas<br \/>\nNo hay soporte para la b\u00fasqueda facetada<\/li>\n<\/ul>\n<p>Ten en cuenta que Couchbase Lite es una base de datos integrada. As\u00ed que se podr\u00eda argumentar que las capacidades de FTS no tienen que ser tan extensas como una implementaci\u00f3n de base de datos del lado del servidor. El soporte para estas ser\u00e1 evaluado en futuras versiones.<\/p>\n<h3 id=\"whatnext\">\u00bfQu\u00e9 sigue?<\/h3>\n<p>Esta entrada de blog muestra c\u00f3mo puedes aprovechar las capacidades de B\u00fasqueda de Texto Completo (FTS) en la nueva API de Consulta en Couchbase Mobile 2.0. Esto es un comienzo. Espera ver m\u00e1s funcionalidades en futuras versiones. Puedes descargar la \u00faltima versi\u00f3n de nuestra <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/whatsnew.html\">descargas<\/a> p\u00e1gina.<\/p>\n<p>Aqu\u00ed hay algunos otros posts relacionados con Couchbase Mobile Query que pueden ser de inter\u00e9s<br \/>\n- Este <a href=\"https:\/\/www.couchbase.com\/blog\/es\/sql-for-json-query-interface-couchbase-mobile\/\">entrada del blog<\/a> analiza los fundamentos<br \/>\n- Este <a href=\"https:\/\/www.couchbase.com\/blog\/es\/querying-array-collections-couchbase-mobile\/\">entrada del blog<\/a> explica c\u00f3mo consultar colecciones de matrices<br \/>\n- Este <a href=\"https:\/\/www.couchbase.com\/blog\/es\/join-queries-couchbase-mobile\/\">entrada del blog<\/a> explica c\u00f3mo realizar consultas JOIN<\/p>\n<p>Si tiene alguna pregunta o sugerencia, deje un comentario a continuaci\u00f3n o p\u00f3ngase en contacto conmigo en Twitter\u00a0<a href=\"https:\/\/twitter.com\/rajagp\">@rajagp<\/a>\u00a0o env\u00edeme un correo electr\u00f3nico\u00a0<a href=\"mailto:priya.rajagopal@couchbase.com\">priya.rajagopal@couchbase.com<\/a>.  En\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/\">Foros de Couchbase<\/a> son otro buen lugar para plantear preguntas.<\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Couchbase Mobile 2.0, introduces powerful Full Text Search (FTS) capabilities on your JSON Documents. This is part of the new Query interface based on N1QL, Couchbase\u2019s declarative query language that extends SQL for JSON. If you are familiar with SQL, [&hellip;]<\/p>","protected":false},"author":1423,"featured_media":4447,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,7667,1810,2165,1812],"tags":[1261],"ppma_author":[8948],"class_list":["post-4446","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-lite","category-couchbase-mobile","category-full-text-search","category-n1ql-query","tag-json"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Introducing Full Text Search (FTS) in Couchbase Mobile 2.0<\/title>\n<meta name=\"description\" content=\"Couchbase Mobile 2.0 brings us powerful Full text Search (FTS) capabilities of your JSON Documents. This post walks you through several use cases.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/es\/full-text-search-couchbase-mobile-2-0\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing Full Text Search (FTS) in Couchbase Mobile 2.0\" \/>\n<meta property=\"og:description\" content=\"Couchbase Mobile 2.0 brings us powerful Full text Search (FTS) capabilities of your JSON Documents. This post walks you through several use cases.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/full-text-search-couchbase-mobile-2-0\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-01-17T18:30:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:59:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/fts.png\" \/>\n\t<meta property=\"og:image:width\" content=\"430\" \/>\n\t<meta property=\"og:image:height\" content=\"522\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@rajagp\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Priya Rajagopal, Senior Director, Product Management\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/\"},\"author\":{\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\"},\"headline\":\"Introducing Full Text Search (FTS) in Couchbase Mobile 2.0\",\"datePublished\":\"2018-01-17T18:30:34+00:00\",\"dateModified\":\"2025-06-14T03:59:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/\"},\"wordCount\":1832,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/fts.png\",\"keywords\":[\"JSON\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Lite\",\"Couchbase Mobile\",\"Full-Text Search\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/\",\"name\":\"Introducing Full Text Search (FTS) in Couchbase Mobile 2.0\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/fts.png\",\"datePublished\":\"2018-01-17T18:30:34+00:00\",\"dateModified\":\"2025-06-14T03:59:23+00:00\",\"description\":\"Couchbase Mobile 2.0 brings us powerful Full text Search (FTS) capabilities of your JSON Documents. This post walks you through several use cases.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/fts.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/fts.png\",\"width\":430,\"height\":522,\"caption\":\"Full Text Search\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing Full Text Search (FTS) in Couchbase Mobile 2.0\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c\",\"name\":\"Priya Rajagopal, Senior Director, Product Management\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g\",\"caption\":\"Priya Rajagopal, Senior Director, Product Management\"},\"description\":\"Priya Rajagopal is a Senior Director of Product Management at Couchbase responsible for developer platforms for the cloud and the edge. She has been professionally developing software for over 20 years in several technical and product leadership positions, with 10+ years focused on mobile technologies. As a TISPAN IPTV standards delegate, she was a key contributor to the IPTV standards specifications. She has 22 patents in the areas of networking and platform security.\",\"sameAs\":[\"https:\/\/x.com\/rajagp\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/priya-rajagopalcouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Presentaci\u00f3n de la b\u00fasqueda de texto completo (FTS) en Couchbase Mobile 2.0","description":"Couchbase Mobile 2.0 brings us powerful Full text Search (FTS) capabilities of your JSON Documents. This post walks you through several use cases.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/es\/full-text-search-couchbase-mobile-2-0\/","og_locale":"es_MX","og_type":"article","og_title":"Introducing Full Text Search (FTS) in Couchbase Mobile 2.0","og_description":"Couchbase Mobile 2.0 brings us powerful Full text Search (FTS) capabilities of your JSON Documents. This post walks you through several use cases.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/full-text-search-couchbase-mobile-2-0\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-01-17T18:30:34+00:00","article_modified_time":"2025-06-14T03:59:23+00:00","og_image":[{"width":430,"height":522,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/fts.png","type":"image\/png"}],"author":"Priya Rajagopal, Senior Director, Product Management","twitter_card":"summary_large_image","twitter_creator":"@rajagp","twitter_misc":{"Written by":"Priya Rajagopal, Senior Director, Product Management","Est. reading time":"15 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/"},"author":{"name":"Priya Rajagopal, Senior Director, Product Management","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c"},"headline":"Introducing Full Text Search (FTS) in Couchbase Mobile 2.0","datePublished":"2018-01-17T18:30:34+00:00","dateModified":"2025-06-14T03:59:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/"},"wordCount":1832,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/fts.png","keywords":["JSON"],"articleSection":["Best Practices and Tutorials","Couchbase Lite","Couchbase Mobile","Full-Text Search","SQL++ \/ N1QL Query"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/","url":"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/","name":"Presentaci\u00f3n de la b\u00fasqueda de texto completo (FTS) en Couchbase Mobile 2.0","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/fts.png","datePublished":"2018-01-17T18:30:34+00:00","dateModified":"2025-06-14T03:59:23+00:00","description":"Couchbase Mobile 2.0 brings us powerful Full text Search (FTS) capabilities of your JSON Documents. This post walks you through several use cases.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/fts.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/01\/fts.png","width":430,"height":522,"caption":"Full Text Search"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing Full Text Search (FTS) in Couchbase Mobile 2.0"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c2da90e57717ee4970c48a87a131ac2c","name":"Priya Rajagopal, Directora de Gesti\u00f3n de Productos","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4b50a54778b979d8c345b036ab138734","url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","caption":"Priya Rajagopal, Senior Director, Product Management"},"description":"Priya Rajagopal es directora s\u00e9nior de gesti\u00f3n de productos en Couchbase y responsable de las plataformas de desarrollo para la nube y el per\u00edmetro. Lleva m\u00e1s de 20 a\u00f1os dedic\u00e1ndose profesionalmente al desarrollo de software en varios puestos de liderazgo t\u00e9cnico y de producto, con m\u00e1s de 10 a\u00f1os centrados en tecnolog\u00edas m\u00f3viles. Como delegada de est\u00e1ndares IPTV de TISPAN, fue una colaboradora clave en las especificaciones de est\u00e1ndares IPTV. Tiene 22 patentes en las \u00e1reas de redes y seguridad de plataformas.","sameAs":["https:\/\/x.com\/rajagp"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/priya-rajagopalcouchbase-com\/"}]}},"authors":[{"term_id":8948,"user_id":1423,"is_guest":0,"slug":"priya-rajagopalcouchbase-com","display_name":"Priya Rajagopal, Senior Director, Product Management","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/acfb2349788955262cd069497a9e7bdb0e97c26326f2e55811e7c1174e9ef1be?s=96&d=mm&r=g","first_name":"Priya","last_name":"Rajagopal, Senior Director, Product Management","user_url":"","author_category":"","description":"Priya Rajagopal es directora s\u00e9nior de gesti\u00f3n de productos en Couchbase y responsable de las plataformas de desarrollo para la nube y el per\u00edmetro. Lleva m\u00e1s de 20 a\u00f1os dedic\u00e1ndose profesionalmente al desarrollo de software en varios puestos de liderazgo t\u00e9cnico y de producto, con m\u00e1s de 10 a\u00f1os centrados en tecnolog\u00edas m\u00f3viles. Como delegada de est\u00e1ndares IPTV de TISPAN, fue una colaboradora clave en las especificaciones de est\u00e1ndares IPTV. Tiene 22 patentes en las \u00e1reas de redes y seguridad de plataformas."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/4446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/1423"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=4446"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/4446\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/4447"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=4446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=4446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=4446"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=4446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}