{"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\/pt\/full-text-search-couchbase-mobile-2-0\/","title":{"rendered":"Apresentando a pesquisa de texto completo (FTS) no Couchbase Mobile 2.0"},"content":{"rendered":"<p>O Couchbase Mobile 2.0 apresenta recursos avan\u00e7ados de pesquisa de texto completo (FTS) em seus documentos JSON. Isso faz parte da nova interface de consulta baseada em <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/n1ql\/\">N1QL<\/a>a linguagem de consulta declarativa do Couchbase que estende o SQL para JSON. Se voc\u00ea estiver familiarizado com SQL, vai se sentir em casa com a sem\u00e2ntica da nova API.<\/p>\n<p>O Full Text Search permite a consulta em linguagem natural. Este \u00e9 o terceiro de uma s\u00e9rie de posts que discute a interface de consulta no Couchbase Lite. Este blog pressup\u00f5e que voc\u00ea esteja familiarizado com os fundamentos, portanto, se ainda n\u00e3o o fez, n\u00e3o deixe de revisar o artigo <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/sql-for-json-query-interface-couchbase-mobile\/\">postagem anterior<\/a> primeiro. Se estiver interessado, os links para blogs que discutem outros recursos da interface do Query s\u00e3o fornecidos no final desta publica\u00e7\u00e3o.<\/p>\n<p>Voc\u00ea pode fazer o download da vers\u00e3o de pr\u00e9-lan\u00e7amento mais recente do Couchbase Mobile 2.0 em <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\">aqui<\/a>.<\/p>\n<p><!--more--><\/p>\n<h3 id=\"background\">Hist\u00f3rico<\/h3>\n<p>Se voc\u00ea estava usando as vers\u00f5es 1.x do Couchbase Mobile, provavelmente est\u00e1 familiarizado com <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.4\/training\/develop\/using-the-database\/index.html#query-documents\">Visualiza\u00e7\u00f5es de mapas<\/a> para criar \u00edndices e consultas. Na vers\u00e3o 2.0, voc\u00ea n\u00e3o precisa mais criar visualiza\u00e7\u00f5es e fun\u00e7\u00f5es de mapa! Em vez disso, uma interface simples permite a cria\u00e7\u00e3o de \u00edndices e voc\u00ea pode usar uma interface do Query Builder para construir suas consultas. A nova interface de consulta \u00e9 mais simples de usar e muito mais poderosa em compara\u00e7\u00e3o. Vamos descobrir alguns de seus recursos nesta postagem.<\/p>\n<h3 id=\"sampleproject\">Projeto de amostra<\/h3>\n<p>Embora os exemplos discutidos aqui usem o Swift para iOS, observe que, salvo algumas pequenas diferen\u00e7as, a mesma interface de consulta tamb\u00e9m \u00e9 compat\u00edvel com as plataformas Android e Windows.<\/p>\n<p><strong>Portanto, com alguns pequenos ajustes, voc\u00ea poder\u00e1 reutilizar os exemplos de consulta desta postagem ao trabalhar com outras plataformas.<\/strong><\/p>\n<p>Siga as instru\u00e7\u00f5es abaixo se voc\u00ea estiver interessado em um projeto Swift de amostra<\/p>\n<ul>\n<li>Clone o iOS Swift Playground do GitHub\n<pre><code class=\"bash\">$ git clone https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-api-playground<\/code><\/pre>\n<\/li>\n<li>Siga as instru\u00e7\u00f5es de instala\u00e7\u00e3o no manual correspondente <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-api-playground\/blob\/master\/README.md\">LEIAME<\/a> para criar e executar o playground.<\/li>\n<\/ul>\n<h3 id=\"sampledatamodel\">Modelo de dados de amostra<\/h3>\n<p>Usaremos o banco de dados Travel Sample localizado <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-lite-ios-api-playground\/tree\/master\/travel-sample.cblite2\">aqui<\/a>. Voc\u00ea pode incorporar esse banco de dados pr\u00e9-criado em seu aplicativo m\u00f3vel e come\u00e7ar a us\u00e1-lo para suas consultas.<\/p>\n<p>O conjunto de dados de amostra inclui v\u00e1rios tipos de documentos, conforme identificado pelo <code>tipo<\/code> no documento. Vamos nos concentrar em documentos de <code>tipo<\/code> <em>\"marco\"<\/em> . O modelo de documento JSON \u00e9 mostrado abaixo. Para fins de brevidade, omitimos do modelo abaixo algumas das propriedades que n\u00e3o s\u00e3o relevantes para esta postagem.<\/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 o modelo acima para cada um dos exemplos de consulta abaixo. **<\/p>\n<h3 id=\"thedatabasehandle\">O identificador do banco de dados<\/h3>\n<p>Nas consultas abaixo, usaremos o <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/guides\/couchbase-lite\/native-api\/database\/index.html\"><code>Banco de dados<\/code><\/a> API para abrir\/criar o banco de dados 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\">O b\u00e1sico<\/h3>\n<p>O Full Text Search permite a consulta em linguagem natural. Em nossa postagem sobre o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/sql-for-json-query-interface-couchbase-mobile\/\">Fundamentos da consulta<\/a>discutimos o <em>como<\/em> e <em>regex<\/em> express\u00f5es para opera\u00e7\u00f5es de correspond\u00eancia de padr\u00f5es. O FTS supera esse recurso ao permitir o suporte a <em>deriva\u00e7\u00e3o<\/em>, <em>classifica\u00e7\u00e3o baseada em relev\u00e2ncia <\/em>e <em>consulta em linguagem natural espec\u00edfica do local<\/em>.<\/p>\n<p>As pesquisas de texto completo s\u00e3o <strong>n\u00e3o diferencia mai\u00fasculas de min\u00fasculas<\/strong> e usar o <code>partida<\/code> express\u00e3o de consulta. Para executar o FTS, voc\u00ea deve criar <em>\u00cdndice do texto completo<\/em> nas propriedades apropriadas. Voc\u00ea pode criar um \u00edndice em uma ou mais propriedades.<\/p>\n<h3 id=\"stemming\">Deriva\u00e7\u00e3o<\/h3>\n<p>Antes de prosseguirmos com os exemplos, primeiro uma palavra sobre Stemming. Stemming \u00e9 o processo de reduzir as palavras \u00e0 sua palavra raiz. Assim, para <a href=\"https:\/\/en.wikipedia.org\/wiki\/Stemming\">inst\u00e2ncia<\/a>Os termos \"catty\", \"catlike\" e \"cats\" s\u00e3o reduzidos \u00e0 palavra \"cat\". Portanto, a busca pelo termo \"cats\" nos daria resultados que correspondem a \"cat\", \"catlike\" e assim por diante.<\/p>\n<p>Atualmente, o Couchbase Lite oferece suporte a Stemming nos seguintes idiomas<br \/>\n* Dinamarqu\u00eas<br \/>\n* Holand\u00eas<br \/>\n* Ingl\u00eas<br \/>\n* finland\u00eas<br \/>\n* Franc\u00eas<br \/>\n* Alem\u00e3o<br \/>\n* h\u00fangaro<br \/>\n* Italiano<br \/>\n* noruegu\u00eas<br \/>\n* portugu\u00eas<br \/>\n* romeno<br \/>\n* Russo<br \/>\n* espanhol<br \/>\n* sueco<br \/>\n* Turco<\/p>\n<p>Se nenhum idioma espec\u00edfico for usado, o tokenizador ainda dividir\u00e1 o texto em palavras com caracteres de espa\u00e7o em branco Unicode. Portanto, ele deve funcionar, embora menos bem, com qualquer idioma que coloque espa\u00e7os entre as palavras.<\/p>\n<h3 id=\"fulltextindex\">\u00cdndice do texto completo<\/h3>\n<p>O <code>nome<\/code> que est\u00e1 associado ao \u00edndice durante a cria\u00e7\u00e3o \u00e9 importante. Os exemplos de consulta que veremos mais tarde far\u00e3o refer\u00eancia ao \u00edndice apropriado por meio do nome<\/p>\n<h4 id=\"singlepropertyindex\">\u00cdndice de propriedade \u00fanica<\/h4>\n<p>O exemplo a seguir cria um <code>fullTextIndex<\/code> no <em>\"content\" (conte\u00fado)<\/em> propriedade de um <code>Documento<\/code>. Por padr\u00e3o, a deriva\u00e7\u00e3o \u00e9 ativada e a localidade \u00e9 considerada a localidade do dispositivo. Embora n\u00e3o seja mostrado abaixo, voc\u00ea tamb\u00e9m tem a op\u00e7\u00e3o de especificar se os \"acentos\" devem ser ignorados ou n\u00e3o por meio da op\u00e7\u00e3o <code>ignoreAccents<\/code> op\u00e7\u00e3o. Por padr\u00e3o, os acentos n\u00e3o s\u00e3o ignorados.<\/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 propriedades m\u00faltiplas<\/h4>\n<p>O exemplo a seguir cria um <code>fullTextIndex<\/code> em <em>\"content\" (conte\u00fado)<\/em> e <em>\"name\" (nome)<\/em> propriedades de um <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 sem stemiza\u00e7\u00e3o<\/h4>\n<p>O exemplo a seguir cria um <code>fullTextIndex<\/code> no <em>\"content\" (conte\u00fado)<\/em> propriedade de um <code>Documento<\/code> com o stemming desativado. O stemming \u00e9 ativado por padr\u00e3o usando as configura\u00e7\u00f5es atuais de idioma do dispositivo. Definir o idioma como nulo desabilitar\u00e1 o 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\">Pesquisa FTS com Stemming<\/h3>\n<p>A consulta abaixo busca o <em>id<\/em> e <em>conte\u00fado<\/em> propriedades de <em>\"marco\"<\/em> <code>tipo<\/code> documentos que cont\u00eam o termo <em>\"Mec\u00e2nica\"<\/em> no <em>\"content\" (conte\u00fado)<\/em> propriedade. Usamos o <em>\"ContentFTSIndex\"<\/em> que foi criado anteriormente.<\/p>\n<h4 id=\"request\">Solicita\u00e7\u00e3o<\/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\">Resposta de amostra<\/h4>\n<p>A resposta \u00e0 consulta acima incluir\u00e1 documentos que cont\u00eam os termos \"mechanical\", \"mechanism\", \"mechanisms\", \"mechanic\" e assim por diante.<\/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\">Pesquisa FTS <em>sem<\/em> Deriva\u00e7\u00e3o<\/h3>\n<p>A consulta abaixo busca o <em>id<\/em> e <em>conte\u00fado<\/em> propriedades de <em>\"marco\"<\/em> <code>tipo<\/code> documentos que cont\u00eam o termo exato <em>\"Mec\u00e2nica\"<\/em> no <em>\"content\" (conte\u00fado)<\/em> propriedade. Usamos o <em>\"ContentFTSIndexNoStemming\"<\/em> que foi criado anteriormente e que especificava a op\u00e7\u00e3o de desativar o stemming.<\/p>\n<h4 id=\"request\">Solicita\u00e7\u00e3o<\/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\">Resposta de amostra<\/h4>\n<p>A resposta \u00e0 consulta acima incluir\u00e1 documentos que cont\u00eam exatamente o termo \"mechanical\". Observe novamente que todas as pesquisas n\u00e3o diferenciam mai\u00fasculas de 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\">Pesquisa FTS em v\u00e1rias propriedades<\/h3>\n<p>A consulta abaixo busca o <em>id<\/em> , <em>nome<\/em> e <em>conte\u00fado<\/em> propriedades de <em>\"marco\"<\/em> <code>tipo<\/code> documentos que cont\u00eam o termo <em>\"Mec\u00e2nica\"<\/em> no <em>\"name\" (nome)<\/em> ou o <em>\"content\" (conte\u00fado)<\/em> propriedade. Usamos o <em>\"ContentAndNameFTSIndex\"<\/em> que foi criado anteriormente. Esse \u00edndice habilitou a indexa\u00e7\u00e3o no <em>\"name\" (nome)<\/em> e <em>\"content\" (conte\u00fado)<\/em> propriedades<\/p>\n<h4 id=\"request\">Solicita\u00e7\u00e3o<\/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\">Resposta de amostra<\/h4>\n<p>A resposta \u00e0 consulta acima incluir\u00e1 documentos que cont\u00eam o termo \"mechanical\" (ou variantes dele derivadas por meio de stemming) na propriedade \"name\" ou \"content\".<\/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\">Pesquisa FTS com express\u00f5es l\u00f3gicas<\/h3>\n<p>Em um exemplo anterior, voc\u00ea viu que, ao desativar o stemming, \u00e9 poss\u00edvel procurar a string de pesquisa exata. Mas e se voc\u00ea quisesse procurar mais de um termo de pesquisa? O <code>partida<\/code> A express\u00e3o de consulta aceita express\u00f5es l\u00f3gicas, incluindo AND e OR.<\/p>\n<p>A consulta abaixo busca o <em>id<\/em> e <em>conte\u00fado<\/em> propriedades de <em>\"marco\"<\/em> <code>tipo<\/code> documentos que cont\u00eam o termo <em>\"Mec\u00e2nica\"<\/em> ou <em>\"Mecanismo\"<\/em> no <em>\"content\" (conte\u00fado)<\/em> propriedade. Usamos o <em>\"ContentFTSIndexNoStemming\"<\/em> que foi criado anteriormente para desativar o stemming.<\/p>\n<h4 id=\"request\">Solicita\u00e7\u00e3o<\/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\">Resposta de amostra<\/h4>\n<p>A resposta \u00e0 consulta acima incluir\u00e1 documentos que contenham exatamente os termos \"mechanical\" ou \"mechanism\" na propriedade \"content\".<\/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\">Pesquisa FTS com express\u00e3o Wilcard<\/h3>\n<p>Voc\u00ea pode usar o caractere \"*\" na cadeia de pesquisa para representar zero ou mais correspond\u00eancias de caracteres.<\/p>\n<p>A consulta abaixo busca o <em>id<\/em> e <em>conte\u00fado<\/em> propriedades de <em>\"marco\"<\/em> <code>tipo<\/code> documentos que cont\u00eam o termo <em>\"walt*\"<\/em> no <em>\"content\" (conte\u00fado)<\/em> propriedade. Isso corresponder\u00e1 a todos os termos de pesquisa que come\u00e7am com \"walt\" seguido de zero ou mais caracteres. Usamos a propriedade <em>\"ContentFTSIndex\"<\/em> que foi criado anteriormente.<\/p>\n<p><em>OBSERVA\u00c7\u00c3O<\/em>: Pode-se argumentar que o uso de curingas no termo de pesquisa pode ser uma maneira ing\u00eanua de implementar o stemming. Mas, nesse caso, voc\u00ea pode acabar com formas derivadas que podem n\u00e3o corresponder aos termos derivados por stemming. Portanto, \u00e9 prefer\u00edvel usar o stemming se for isso que voc\u00ea precisa.<\/p>\n<h4 id=\"request\">Solicita\u00e7\u00e3o<\/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\">Resposta de amostra<\/h4>\n<p>A resposta \u00e0 consulta acima incluir\u00e1 documentos que cont\u00eam os termos \"walt\", \"Walter\", \"Waltham\", \"Walthamstow\" e assim por diante.<\/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\">Pesquisa FTS com palavras de parada<\/h3>\n<p>As stop words referem-se a palavras comuns em um idioma. Em ingl\u00eas, seriam termos como \"the\", \"is\", \"and\", \"which\" e assim por diante.<\/p>\n<h4 id=\"example1:searchstringcontainsstopwords\">Exemplo 1: A cadeia de pesquisa cont\u00e9m palavras de parada<\/h4>\n<p>O Couchbase Lite ignora as palavras de parada que aparecem na string de pesquisa.<\/p>\n<p>A consulta abaixo busca o <em>id<\/em> e <em>conte\u00fado<\/em> propriedades de <em>\"marco\"<\/em> <code>tipo<\/code> documentos que cont\u00eam o termo <em>\"sobre a hist\u00f3ria\"<\/em> no <em>\"content\" (conte\u00fado)<\/em> propriedade. Usamos o <em>\"ContentFTSIndex\"<\/em> que foi criado anteriormente.<\/p>\n<p>O Couchbase Lite ignora as palavras de parada \"on\" e \"the\", portanto, voc\u00ea buscaria documentos que inclu\u00edssem apenas o termo \"history\" e as formas derivadas da palavra de origem<\/p>\n<p>Solicita\u00e7\u00e3o<\/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\">Resposta de amostra<\/h5>\n<p>A resposta \u00e0 consulta acima incluir\u00e1 documentos que cont\u00eam os termos \"history\" e formas derivadas dessa palavra, como \"historical\"<\/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\">Exemplo 2: Ignorando palavras de parada durante a pesquisa<\/h4>\n<p>Por padr\u00e3o, o Couchbase Lite ignora palavras de parada no conte\u00fado da pesquisa.<\/p>\n<p>A consulta abaixo busca o <em>id<\/em> e <em>conte\u00fado<\/em> propriedades de <em>\"marco\"<\/em> <code>tipo<\/code> documentos que cont\u00eam os termos <em>\"barbatana azul barbatana amarela\"<\/em> no <em>\"content\" (conte\u00fado)<\/em> propriedade. Usamos o <em>\"ContentFTSIndex\"<\/em> que foi criado anteriormente.<\/p>\n<p>O Couchbase Lite ignora palavras de parada durante a pesquisa, portanto, voc\u00ea buscaria documentos que inclu\u00edssem os termos \"blue\", \"fin\" e \"yellow\" nessa ordem, separados por qualquer n\u00famero de palavras de parada.<\/p>\n<h5 id=\"request\">Solicita\u00e7\u00e3o<\/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\">Resposta de amostra<\/h5>\n<p>A resposta \u00e0 consulta acima incluir\u00e1 documentos que cont\u00eam os termos \"blue\" (azul), \"fin\" (barbatana) e \"yellow\" (amarelo) separados por qualquer n\u00famero de palavras de parada, como \"blue fin and yellow fin\" (barbatana azul e barbatana amarela)<\/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\">Pesquisa FTS com classifica\u00e7\u00e3o<\/h3>\n<p>Voc\u00ea pode usar o <code>FullTextFunction.rank<\/code> para especificar a ordem de classifica\u00e7\u00e3o dos resultados da pesquisa. Isso \u00e9 \u00fatil para classificar as correspond\u00eancias na ordem da melhor correspond\u00eancia.<\/p>\n<p>A consulta abaixo busca o <em>id<\/em> e <em>conte\u00fado<\/em> propriedades de <em>\"marco\"<\/em> <code>tipo<\/code> documentos que cont\u00eam o termo <em>\"atrair\"<\/em> no <em>\"content\" (conte\u00fado)<\/em> propriedade. Os documentos s\u00e3o ordenados em ordem decrescente de acordo com a classifica\u00e7\u00e3o, o que significa que o documento com o n\u00famero m\u00e1ximo de correspond\u00eancias \u00e9 classificado acima dos demais.<\/p>\n<h5 id=\"request\">Solicita\u00e7\u00e3o<\/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\">Resposta de amostra<\/h5>\n<p>A resposta \u00e0 consulta acima incluir\u00e1 documentos que incluem o termo <em>\"atrair\"<\/em> ou vers\u00f5es derivadas dele. Os documentos com o n\u00famero m\u00e1ximo de correspond\u00eancias s\u00e3o classificados em ordem 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\">Limita\u00e7\u00f5es<\/h3>\n<p>Embora a capacidade do FTS no Couchbase Lite 2.0 seja extremamente avan\u00e7ada e seja suficiente para casos de uso t\u00edpicos de um banco de dados incorporado, h\u00e1 algumas limita\u00e7\u00f5es<\/p>\n<ul>\n<li>A express\u00e3o de correspond\u00eancia s\u00f3 pode estar no n\u00edvel superior ou na express\u00e3o AND de n\u00edvel superior. Isso significa que a seguinte express\u00e3o n\u00e3o \u00e9 permitida\u00a0<span style=\"color: #222222;font-family: Monaco, Consolas, 'Andale Mono', 'DejaVu Sans Mono', monospace;font-size: 15px;background-color: #e9ebec\">ftsExpression.match(\"attract\").or(ftsExpression2.match(\"museum\"))<\/span><\/li>\n<\/ul>\n<ul>\n<li>Tokenizadores de idiomas personalizados<br \/>\nA lista de idiomas compat\u00edveis foi especificada anteriormente. No momento da reda\u00e7\u00e3o deste post, n\u00e3o \u00e9 poss\u00edvel conectar um tokenizador personalizado para ampliar o suporte a outros idiomas<\/li>\n<li>\u00a0Suporte \u00e0 pesquisa difusa<br \/>\nN\u00e3o podemos especificar um fator de \"imprecis\u00e3o\" na consulta, o que pode resultar na considera\u00e7\u00e3o de correspond\u00eancias menos relevantes<\/li>\n<li>\u00a0Facetas<br \/>\nN\u00e3o h\u00e1 suporte para pesquisa facetada<\/li>\n<\/ul>\n<p>Lembre-se de que o Couchbase Lite \u00e9 um banco de dados incorporado. Portanto, pode-se argumentar que os recursos do FTS n\u00e3o precisam ser t\u00e3o extensos quanto uma implementa\u00e7\u00e3o de banco de dados no lado do servidor. O suporte para esses recursos ser\u00e1 avaliado em vers\u00f5es futuras.<\/p>\n<h3 id=\"whatnext\">O que vem a seguir<\/h3>\n<p>Esta postagem do blog analisou como voc\u00ea pode aproveitar os recursos de pesquisa de texto completo (FTS) na nova API de consulta do Couchbase Mobile 2.0. Isso \u00e9 um come\u00e7o. Espere ver mais funcionalidades em vers\u00f5es futuras. Voc\u00ea pode fazer o download da vers\u00e3o mais recente em nosso <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/2.0\/whatsnew.html\">downloads<\/a> p\u00e1gina.<\/p>\n<p>Aqui est\u00e3o algumas outras postagens relacionadas ao Couchbase Mobile Query que podem ser de interesse<br \/>\n- Isso <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/sql-for-json-query-interface-couchbase-mobile\/\">postagem no blog<\/a> discute os fundamentos<br \/>\n- Isso <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/querying-array-collections-couchbase-mobile\/\">postagem no blog<\/a> discute como consultar cole\u00e7\u00f5es de matrizes<br \/>\n- Isso <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/join-queries-couchbase-mobile\/\">postagem no blog<\/a> discute como fazer consultas JOIN<\/p>\n<p>Se tiver d\u00favidas ou coment\u00e1rios, deixe um coment\u00e1rio abaixo ou entre em contato comigo pelo Twitter\u00a0<a href=\"https:\/\/twitter.com\/rajagp\">@rajagp<\/a>\u00a0ou envie-me um e-mail\u00a0<a href=\"mailto:priya.rajagopal@couchbase.com\">priya.rajagopal@couchbase.com<\/a>.  O\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/\">F\u00f3runs do Couchbase<\/a> s\u00e3o outro bom lugar para entrar em contato com perguntas.<\/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.8 (Yoast SEO v25.8) - 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\/pt\/full-text-search-couchbase-mobile-2-0\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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\":\"pt-BR\",\"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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\",\"@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\/pt\/author\/priya-rajagopalcouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Apresentando a pesquisa de texto completo (FTS) no 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\/pt\/full-text-search-couchbase-mobile-2-0\/","og_locale":"pt_BR","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\/pt\/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":"pt-BR","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":"Apresentando a pesquisa de texto completo (FTS) no 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":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/full-text-search-couchbase-mobile-2-0\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@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":"Blog do Couchbase","description":"Couchbase, o banco de dados 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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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, Diretora S\u00eanior, Gerenciamento de Produtos","image":{"@type":"ImageObject","inLanguage":"pt-BR","@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 \u00e9 diretora s\u00eanior de gerenciamento de produtos da Couchbase, respons\u00e1vel pelas plataformas de desenvolvedor para a nuvem e a borda. Ela desenvolve software profissionalmente h\u00e1 mais de 20 anos em v\u00e1rios cargos t\u00e9cnicos e de lideran\u00e7a de produtos, com mais de 10 anos de foco em tecnologias m\u00f3veis. Como delegada de padr\u00f5es de IPTV da TISPAN, ela foi uma das principais colaboradoras das especifica\u00e7\u00f5es de padr\u00f5es de IPTV. Ela tem 22 patentes nas \u00e1reas de rede e seguran\u00e7a de plataforma.","sameAs":["https:\/\/x.com\/rajagp"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/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","author_category":"","last_name":"Rajagopal, Senior Director, Product Management","first_name":"Priya","job_title":"","user_url":"","description":"Priya Rajagopal \u00e9 diretora s\u00eanior de gerenciamento de produtos da Couchbase, respons\u00e1vel pelas plataformas de desenvolvedor para a nuvem e a borda. Ela desenvolve software profissionalmente h\u00e1 mais de 20 anos em v\u00e1rios cargos t\u00e9cnicos e de lideran\u00e7a de produtos, com mais de 10 anos de foco em tecnologias m\u00f3veis. Como delegada de padr\u00f5es de IPTV da TISPAN, ela foi uma das principais colaboradoras das especifica\u00e7\u00f5es de padr\u00f5es de IPTV. Ela tem 22 patentes nas \u00e1reas de rede e seguran\u00e7a de plataforma."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/1423"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=4446"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/4446\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/4447"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=4446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=4446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=4446"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=4446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}