{"id":6738,"date":"2019-04-22T23:46:13","date_gmt":"2019-04-23T06:46:13","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=6738"},"modified":"2025-06-13T20:59:10","modified_gmt":"2025-06-14T03:59:10","slug":"search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/","title":{"rendered":"Busca e resgate: 7 raz\u00f5es pelas quais os desenvolvedores de N1QL usam a pesquisa"},"content":{"rendered":"<figure class=\"wp-block-pullquote\">\r\n<blockquote>\r\n<p><br \/><strong>As pessoas n\u00e3o querem um \u00edndice de quatro teclas.  Elas precisam de uma resposta em quatro ms.<\/strong><\/p>\r\n<cite><a href=\"https:\/\/en.wikiquote.org\/wiki\/Theodore_Levitt\">Ted Levitt<\/a><\/cite><\/blockquote>\r\n<\/figure>\r\n\r\n\r\n\r\n<p>O desenvolvimento de aplicativos \u00e9 exigente. Cada aplicativo est\u00e1 tentando progredir em nome do cliente - procurando o produto certo ou o formul\u00e1rio certo, fazendo pedidos, cancelando, enviando, verificando o status etc.<\/p>\r\n<p>A consulta t\u00edpica e os bancos de dados e a infraestrutura baseados em B-Tree s\u00e3o adequados para o desenvolvimento de muitos dos m\u00f3dulos. Ainda assim, h\u00e1 casos em que a pesquisa baseada em SQL e B-Tree \u00e9 ineficaz para atender ao seu SLA.<\/p>\r\n<p>Aqui est\u00e3o os sete problemas que voc\u00ea encontraria no desenvolvimento de SQL e as solu\u00e7\u00f5es para eles usando a tecnologia de pesquisa. Usei o Couchbase N1QL como exemplo de implementa\u00e7\u00e3o de SQL, o Couchbase GSI como exemplo de \u00edndices baseados em B-Tree (logicamente falando) e o FTS (Couchbase Full-Text Search) como exemplo de tecnologia de pesquisa.<\/p>\r\n<p>Tamb\u00e9m usarei o <strong>amostra de viagem<\/strong> modelo e dados no conjunto de dados de amostra do Couchbase nos exemplos.<\/p>\r\n\r\n<h4><span style=\"text-decoration: underline\"><span style=\"color: #0000ff;text-decoration: underline\">Desafios do desenvolvedor<\/span><\/span><\/h4>\r\n\r\n<p><strong> 1. O problema de pesquisa NAME (tamb\u00e9m conhecido como o problema LIKE)<\/strong><\/p>\r\n\r\n\r\n\r\n<p>A m\u00eddia social pode gostar de <em>como<\/em> frequentemente, mas o SQL n\u00e3o. Os predicados do tipo LIKE s\u00e3o uma das primeiras coisas a serem observadas quando s\u00e3o usados em uma consulta. Sem um uso cuidadoso, o predicado LIKE aumentar\u00e1 a lat\u00eancia, reduzir\u00e1 a taxa de transfer\u00eancia e encerrar\u00e1 sua opera\u00e7\u00e3o.  Aqui est\u00e1 um exemplo de predicados LIKE que vi em aplicativos reais de clientes.<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>WHERE name LIKE \"%joe%\";<\/li>\r\n<li>WHERE UPPER(name) LIKE \"%JOE%\"<\/li>\r\n<li>WHERE REGEX_CONTAINS(name, \".*joe.*\")<\/li>\r\n<li>WHERE name LIKE \"% joe %\"<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Problemas:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Mesmo quando voc\u00ea tiver um \u00edndice sobre o nome, ter\u00e1 que verificar todo o \u00edndice para determinar todos os documentos com joe.<\/li>\r\n<li>Voc\u00ea teria que criar um \u00edndice funcional (por exemplo, UPPER(name)) e ter a chave adicional com o nome para salvar o caso exato do nome.  Por exemplo, McDonald<\/li>\r\n<li>Com os tr\u00eas primeiros predicados, voc\u00ea obter\u00e1 n\u00e3o apenas joe, mas tamb\u00e9m as cadeias de caracteres joel, sojoel, bejoel etc.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p><strong>2. O problema de combina\u00e7\u00f5es m\u00faltiplas<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Quando os nomes s\u00e3o divididos em nome, nome do meio e sobrenome, voc\u00ea precisa pesquisar em todos os lugares. \u00c0s vezes, voc\u00ea deseja pesquisar uma cadeia de caracteres em qualquer um dos nomes.   Combine isso com a correspond\u00eancia do n\u00famero de chamada. Sua consulta ser\u00e1 semelhante a esta.<\/p>\r\n\r\n\r\n\r\n<p><br \/>SELECT c.customerid, c.fname, c.mname, c.lname, c.address<br \/>FROM customer c<br \/>WHERE (c.fname in ['John', 'Doe']<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0OR c.mname in ['John', 'Doe']<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0OR c.lname in ['John', 'Doe'])<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0OR (ANY p in c.contacts satisfaz p = '6509264813')<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0OR (ANY q in c.services satisfaz q = '6509264813')<\/p>\r\n\r\n\r\n\r\n<p>Agora, tente criar um \u00edndice B-TREE que ofere\u00e7a n\u00e3o apenas a baixa lat\u00eancia que voc\u00ea deseja, mas tamb\u00e9m uma alta taxa de transfer\u00eancia. \u00a0<\/p>\r\n\r\n\r\n\r\n<p><strong>3. Al\u00e9m da correspond\u00eancia exata<\/strong><\/p>\r\n\r\n\r\n\r\n<p>As correspond\u00eancias no mundo real s\u00e3o inexatas.  William pode ser abreviado como <a href=\"https:\/\/en.m.wikipedia.org\/wiki\/William\">Will, Willy, Bill e Billy<\/a>.  Os irlandeses e os escoceses t\u00eam abrevia\u00e7\u00f5es adicionais.  Como voc\u00ea procura por Billy e acaba encontrando um William?<\/p>\r\n\r\n\r\n\r\n<p><strong><br \/>4. Pesquisa com base em requisitos comerciais<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Cada empresa tem regras para resolver as informa\u00e7\u00f5es do cliente (nome, endere\u00e7o e data de nascimento) para um cliente espec\u00edfico.  Algumas d\u00e3o maior prioridade ao endere\u00e7o, outras ao nome ou endere\u00e7o. As regras podem dizer que dois dos quatro devem ser uma correspond\u00eancia exata e os outros devem ser uma correspond\u00eancia parcial.     Os predicados N1QL tornam-se ainda mais complexos do que no segundo caso. Portanto, o \u00edndice GSI adequado para a consulta tamb\u00e9m se torna complicado.<\/p>\r\n\r\n\r\n\r\n<p><strong>5. Ordem de relev\u00e2ncia<\/strong><\/p>\r\n\r\n\r\n\r\n<p>A ordena\u00e7\u00e3o do N1QL \u00e9 baseada na cl\u00e1usula ORDER BY e na express\u00e3o dentro dela. Quando estiver fazendo uma correspond\u00eancia inexata, talvez queira que a ordem se baseie na pontua\u00e7\u00e3o do texto e na dist\u00e2ncia do padr\u00e3o de pesquisa fornecido.<\/p>\r\n\r\n\r\n\r\n<p><strong>6. O problema da matriz.<\/strong><\/p>\r\n\r\n\r\n\r\n<p>As matrizes JSON permitem que voc\u00ea armazene as rela\u00e7\u00f5es 1:N, N:M como uma matriz de objetos ou matrizes com links para outros objetos. <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/working-json-arrays-n1ql\/\">Este artigo<\/a> fornece detalhes sobre a manipula\u00e7\u00e3o de matrizes. O <a href=\"https:\/\/dzone.com\/articles\/nesting-and-unnesting-in-couchbase-n1ql\">segundo artigo<\/a> descreve outras opera\u00e7\u00f5es orientadas a conjuntos em matrizes. Para obter o melhor desempenho ao pesquisar dentro de matrizes, voc\u00ea precisa <a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/n1ql\/n1ql-language-reference\/indexing-arrays.html\">criar \u00edndices com chaves de matriz<\/a>. O \u00edndice de matriz vem com uma limita\u00e7\u00e3o: cada \u00edndice de matriz s\u00f3 pode ter uma chave de matriz por \u00edndice. Portanto, quando voc\u00ea tem um objeto de cliente com v\u00e1rios campos de matriz, n\u00e3o \u00e9 poss\u00edvel pesquisar todos eles usando um \u00fanico \u00edndice. Quando voc\u00ea tem clientes com uma matriz de n\u00fameros de contato e uma matriz de contatos de e-mail, n\u00e3o \u00e9 poss\u00edvel pesquisar por ambos usando um \u00fanico \u00edndice, o que causa consultas caras. Essa \u00e9 uma <a href=\"https:\/\/docs.mongodb.com\/manual\/core\/index-multikey\/#limitations\">limita\u00e7\u00e3o comum dos \u00edndices de matriz baseados em b-tree<\/a>. Como o \u00edndice da \u00e1rvore B armazena elementos de matriz individuais como chaves distintas, ter v\u00e1rias chaves de matriz exigir\u00e1 que o \u00edndice armazene o produto do n\u00famero de chaves (no exemplo acima, (n\u00famero de n\u00fameros de contato) * (n\u00famero de e-mails). O tamanho do \u00edndice aumentar\u00e1 exponencialmente. Para evitar isso, os produtos desabilitam a cria\u00e7\u00e3o de v\u00e1rias chaves de matriz para um \u00fanico \u00edndice.<\/p>\r\n\r\n\r\n\r\n<p>No entanto, o trabalho do desenvolvedor de procurar com efici\u00eancia em v\u00e1rias matrizes JSON permanece.<\/p>\r\n\r\n\r\n\r\n<p><strong>7. V\u00e1rias consultas, \u00edndice \u00fanico.<\/strong><\/p>\r\n\r\n\r\n\r\n<p>O modelo JSON tem sido usado com sucesso para agregar informa\u00e7\u00f5es de v\u00e1rias fontes. O objetivo de agregar todas essas informa\u00e7\u00f5es n\u00e3o \u00e9 simplesmente armazen\u00e1-las, mas consult\u00e1-las e obter valor comercial. Quando se tem uma consulta ad-hoc em um conjunto de dados, \u00e9 dif\u00edcil planejar previamente e recriar os \u00edndices necess\u00e1rios para ela. O pr\u00f3prio N1QL fornece o <a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/n1ql\/n1ql-language-reference\/adaptive-indexing.html\">\u00edndice adaptativo<\/a> que ajuda em determinados casos de uso. Se voc\u00ea tiver v\u00e1rios predicados, cada um dos quais pode retornar um grande conjunto de resultados, o \u00edndice adapt\u00e1vel ter\u00e1 problemas de desempenho devido \u00e0 quantidade de transfer\u00eancia de dados do \u00edndice para o n\u00f3 de consulta e ao grande conjunto de resultados intermedi\u00e1rios.<\/p>\r\n\r\n\r\n\r\n<p>Nesse caso, os desenvolvedores precisam monitorar e ajustar continuamente os \u00edndices. Os usu\u00e1rios com problemas de desempenho continuar\u00e3o a reclamar.<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n<h4><span style=\"text-decoration: underline\"><span style=\"color: #0000ff;text-decoration: underline\">Solu\u00e7\u00f5es:<\/span><\/span><\/h4>\r\n\r\n<p><strong>1. o problema de pesquisa NAME (tamb\u00e9m conhecido como o problema LIKE)<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Se voc\u00ea estiver pesquisando joe, Joel ou jolly, todas elas tendem a ser palavras individuais. Normalmente, voc\u00ea n\u00e3o est\u00e1 procurando por la<strong>joelho<\/strong>lla. O \u00edndice de pesquisa pega cada palavra em seu campo (nome, t\u00edtulo ou coment\u00e1rio), analisa-a com base nas caracter\u00edsticas do idioma, categoriza as palavras em stop words (desinteressantes e que n\u00e3o costumam ser pesquisadas - por exemplo: and, or, not, the em ingl\u00eas) e termos. Indexar o termo em vez da palavra real tem dois benef\u00edcios.<\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li>Ele agrupa as palavras relacionadas: <em>Francisco<\/em>, <em>francisco<\/em>, <em>franco<\/em>, <em>francisco<\/em>, etc. Ao pesquisar por francisco, voc\u00ea tamb\u00e9m encontrar\u00e1 palavras intimamente relacionadas <em>Francisco<\/em>.<\/li>\r\n<li>Esse agrupamento tamb\u00e9m reduzir\u00e1 o tamanho do \u00edndice porque s\u00f3 precisamos indexar o termo raiz em vez de todos os modificadores dessa palavra.<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p>De volta \u00e0 pesquisa de nomes: Vamos agora pesquisar o nome do hotel.<\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li>Criar um \u00edndice FTS em documentos do tipo <strong>'hotel' <\/strong>e o campo <strong>nome<\/strong> no documento.<\/li>\r\n<li>Comece a pesquisar pelo nome:\r\n<ul>\r\n<li>Aqui est\u00e1 a consulta a ser executada:<\/li>\r\n<\/ul>\r\n<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p class=\"editor-rich-text__tinymce mce-content-body\"><strong>curl -XPOST -H \"Content-Type: application\/json\" \\ https:\/\/172.23.120.38:8094\/api\/index\/trhotelname\/query \\ -d '{ \"explain\": true, \"fields\": [ \"*\" ], \"highlight\": {}, \"query\": { \"query\": \"francisco\" } }'<\/strong><\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li>Procurando por <strong>francisco<\/strong> fornece os nomes dos hot\u00e9is:\r\n<ul>\r\n<li>\r\n<ul>\r\n<li>\"nome\": \"The Opal San Francisco\",<\/li>\r\n<li>\"nome\": \"Francisco Bay Inn\",<\/li>\r\n<li>e mais (totalmente 11 resultados).<\/li>\r\n<li>\u00a0<\/li>\r\n<\/ul>\r\n<\/li>\r\n<\/ul>\r\n<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p><strong>2) O problema de v\u00e1rias partidas <\/strong><\/p>\r\n\r\n\r\n\r\n<p>Vimos a consulta complexa anteriormente.<\/p>\r\n\r\n\r\n\r\n<p>SELECT c.customerid, c.fname, c.mname, c.lname, c.address<br \/>FROM customer c<br \/>WHERE (c.fname in ['John', 'Doe']<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0OR c.mname in ['John', 'Doe']<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0OR c.lname in ['John', 'Doe'])<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0OR (ANY p in c.contacts satisfaz p = '6509264813')<br \/>\u00a0\u00a0\u00a0\u00a0\u00a0OR (ANY q in c.services satisfaz q = '6509264813')<\/p>\r\n\r\n\r\n\r\n<p>No FTS, podemos definir um <a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/fts\/fts-creating-indexes.html\">campo especial _all<\/a> que combina v\u00e1rios campos. A pesquisa nesse \u00edndice pesquisa automaticamente em TODOS os campos. (Consulte tamb\u00e9m <a href=\"https:\/\/dzone.com\/articles\/8-ways-to-customize-couchbase-full-text-search-ind-1\">este artigo<\/a>) Este \u00e9 um \u00edndice de cinco campos no documento do hotel:<\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li>cidade<\/li>\r\n<li>pa\u00eds<\/li>\r\n<li>nome<\/li>\r\n<li>public_likes (um campo de matriz)<\/li>\r\n<li>descri\u00e7\u00e3o<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p>Exemplo de valores para os cinco campos:<\/p>\r\n\r\n\r\n\r\n<p>[<br \/>{<br \/>\"cidade\": \"Medway\",<br \/>\"country\": \"United Kingdom\" (Reino Unido),<br \/>\"description\": \"Albergue de ver\u00e3o com 40 leitos a cerca de 5 km de Gillingham, instalado em uma distinta Oast House convertida em um ambiente semi-rural.\",<br \/>\"name\": \"Medway Youth Hostel\",<br \/>\"public_likes\": [<br \/>\"Julius Tromp I\",<br \/>\"Corrine Hilll\",<br \/>\"Jaeden McKenzie\",<br \/>\"Vallie Ryan\",<br \/>\"Brian Kilback\",<br \/>\"Lilian McLaughlin\",<br \/>\"Sra. Moses Feeney\",<br \/>\"Elnora Trantow\"<br \/>]<br \/>}<br \/>]<\/p>\r\n\r\n\r\n\r\n<p>Depois que voc\u00ea definir o \u00edndice de pesquisa em todos esses campos, basta come\u00e7ar a consultar.<\/p>\r\n\r\n<pre class=\"theme:github font-size:15 height-set:true width-set:true scroll:true whitespace-before:2 whitespace-after:2 lang:js decode:true\" title=\"Procurar por \">curl -XPOST -H \"Content-Type: application\/json\" \\\r\nhttps:\/\/172.23.120.38:8094\/api\/index\/trinfoall\/query \\\r\n-d '{\r\n  \"explain\": true,\r\n  \"fields\": [\r\n    \"*\"\r\n  ],\r\n  \"highlight\": {},\r\n  \"query\": {\r\n    \"query\": \"summer\"\r\n  }\r\n}'<\/pre>\r\n<p>&nbsp;<\/p>\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n<pre class=\"theme:github height-set:true width-set:true wrap:true scroll:true whitespace-before:1 whitespace-after:1 lang:js decode:true\" title=\"consulta flex\u00edvel com correspond\u00eancia de v\u00e1rios campos\">curl -XPOST -H \"Content-Type: application\/json\" \\\r\nhttps:\/\/172.23.120.38:8094\/api\/index\/trinfoall\/query \\\r\n-d '{\r\n  \"explain\": true,\r\n  \"fields\": [\r\n    \"*\"\r\n  ],\r\n  \"highlight\": {},\r\n  \"query\": {\r\n    \"query\": \"medway \\\"Vallie Ryan\\\"  united kingdom\"\r\n  }\r\n}'<\/pre>\r\n<p>&nbsp;<\/p>\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p>Esta \u00e9 a defini\u00e7\u00e3o de \u00edndice para o \u00edndice do campo _all usado aqui.<\/p>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n<pre class=\"theme:github height-set:true height:700 width-set:true width:700 lang:js decode:true\" title=\"Defini\u00e7\u00e3o do \u00edndice FTS para o campo _all\">{\r\n  \"type\": \"fulltext-index\",\r\n  \"name\": \"trinfoall\",\r\n  \"uuid\": \"430401ce6b5c1879\",\r\n  \"sourceType\": \"couchbase\",\r\n  \"sourceName\": \"travel-sample\",\r\n  \"sourceUUID\": \"ddd78a53e740e6a8274e13c990b47abc\",\r\n  \"planParams\": {\r\n    \"maxPartitionsPerPIndex\": 171\r\n  },\r\n  \"params\": {\r\n    \"doc_config\": {\r\n      \"docid_prefix_delim\": \"\",\r\n      \"docid_regexp\": \"\",\r\n      \"mode\": \"type_field\",\r\n      \"type_field\": \"type\"\r\n    },\r\n    \"mapping\": {\r\n      \"analysis\": {},\r\n      \"default_analyzer\": \"standard\",\r\n      \"default_datetime_parser\": \"dateTimeOptional\",\r\n      \"default_field\": \"_all\",\r\n      \"default_mapping\": {\r\n        \"dynamic\": true,\r\n        \"enabled\": false\r\n      },\r\n      \"default_type\": \"_default\",\r\n      \"docvalues_dynamic\": true,\r\n      \"index_dynamic\": true,\r\n      \"store_dynamic\": false,\r\n      \"type_field\": \"_type\",\r\n      \"types\": {\r\n        \"hotel\": {\r\n          \"dynamic\": true,\r\n          \"enabled\": true,\r\n          \"properties\": {\r\n            \"city\": {\r\n              \"dynamic\": false,\r\n              \"enabled\": true,\r\n              \"fields\": [\r\n                {\r\n                  \"docvalues\": true,\r\n                  \"include_in_all\": true,\r\n                  \"include_term_vectors\": true,\r\n                  \"index\": true,\r\n                  \"name\": \"city\",\r\n                  \"type\": \"text\"\r\n                }\r\n              ]\r\n            },\r\n            \"country\": {\r\n              \"dynamic\": false,\r\n              \"enabled\": true,\r\n              \"fields\": [\r\n                {\r\n                  \"docvalues\": true,\r\n                  \"include_in_all\": true,\r\n                  \"include_term_vectors\": true,\r\n                  \"index\": true,\r\n                  \"name\": \"country\",\r\n                  \"type\": \"text\"\r\n                }\r\n              ]\r\n            },\r\n            \"description\": {\r\n              \"dynamic\": false,\r\n              \"enabled\": true,\r\n              \"fields\": [\r\n                {\r\n                  \"docvalues\": true,\r\n                  \"include_in_all\": true,\r\n                  \"include_term_vectors\": true,\r\n                  \"index\": true,\r\n                  \"name\": \"description\",\r\n                  \"type\": \"text\"\r\n                }\r\n              ]\r\n            },\r\n            \"name\": {\r\n              \"dynamic\": false,\r\n              \"enabled\": true,\r\n              \"fields\": [\r\n                {\r\n                  \"docvalues\": true,\r\n                  \"include_in_all\": true,\r\n                  \"include_term_vectors\": true,\r\n                  \"index\": true,\r\n                  \"name\": \"name\",\r\n                  \"type\": \"text\"\r\n                }\r\n              ]\r\n            },\r\n            \"public_likes\": {\r\n              \"dynamic\": false,\r\n              \"enabled\": true,\r\n              \"fields\": [\r\n                {\r\n                  \"docvalues\": true,\r\n                  \"include_in_all\": true,\r\n                  \"include_term_vectors\": true,\r\n                  \"index\": true,\r\n                  \"name\": \"public_likes\",\r\n                  \"type\": \"text\"\r\n                }\r\n              ]\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    \"store\": {\r\n      \"indexType\": \"scorch\",\r\n      \"kvStoreName\": \"\"\r\n    }\r\n  },\r\n  \"sourceParams\": {}\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n\r\n<p>&nbsp;<\/p>\r\n\r\n\r\n\r\n<p><strong>3. Al\u00e9m da correspond\u00eancia exata<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Search (FTS) faz mais do que uma pesquisa exata. Ela faz a pesquisa de termos, pesquisa de intervalos, pesquisa difusa, conjun\u00e7\u00f5es, disjun\u00e7\u00f5es, pesquisa geogr\u00e1fica (vizinho mais pr\u00f3ximo), pesquisa regex, pesquisa impulsionada, pesquisa de frases e muito mais. Veja exemplos e detalhes em <a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/fts\/fts-query-types.html\">Documenta\u00e7\u00e3o do Couchbase FTS<\/a>.<\/p>\r\n\r\n\r\n\r\n<p><strong>4. pesquisa com base em requisitos comerciais (seus)<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Quando estiver pesquisando hot\u00e9is em Nova York, talvez prefira hot\u00e9is em Manhattan, mas tamb\u00e9m queira ver outros hot\u00e9is. Agora, basta aumentar o termo de pesquisa Manhattan acrescentando ^5. Esse aumento melhora a pontua\u00e7\u00e3o dos documentos que cont\u00eam Manhattan. Por padr\u00e3o, os resultados s\u00e3o ordenados em ordem decrescente de pontua\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p><strong>5. Ordena\u00e7\u00e3o de relev\u00e2ncia<\/strong><\/p>\r\n\r\n\r\n\r\n<p>No SQL, a ordena\u00e7\u00e3o \u00e9 baseada no valor da express\u00e3o ou do pr\u00f3prio campo. Na pesquisa, a relev\u00e2ncia de um documento \u00e9 calculada pela dist\u00e2ncia entre o que voc\u00ea est\u00e1 pesquisando e o que o documento cont\u00e9m. Essa \u00e9 a pontua\u00e7\u00e3o que manipulamos ao aumentar a import\u00e2ncia de um termo na se\u00e7\u00e3o anterior. Voc\u00ea pode<a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/fts\/fts-sorting.html\"> classificar os resultados<\/a> por essa pontua\u00e7\u00e3o e qualquer outro campo, usando a cl\u00e1usula de classifica\u00e7\u00e3o da solicita\u00e7\u00e3o de pesquisa.<\/p>\r\n\r\n\r\n\r\n<p><strong>6. o problema da matriz<\/strong><\/p>\r\n\r\n\r\n\r\n<p>Agora, vamos criar um \u00fanico \u00edndice nas quatro matrizes a seguir.<\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li>public_likes<\/li>\r\n<li>reviews.author<\/li>\r\n<li>coment\u00e1rios.classifica\u00e7\u00f5es.localiza\u00e7\u00e3o<\/li>\r\n<li>coment\u00e1rios.classifica\u00e7\u00f5es.servi\u00e7o<\/li>\r\n<\/ol>\r\n\r\n<p>Aqui est\u00e1 a defini\u00e7\u00e3o do \u00edndice. Esse \u00e9 um \u00edndice \u00fanico em <strong><span style=\"color: #0000ff\">quatro chaves de matriz<\/span>. <\/strong>Isso \u00e9 algo que voc\u00ea nunca poderia fazer em um \u00edndice baseado em \u00e1rvore B.<\/p>\r\n\r\n<p>Agora, voc\u00ea pode fazer consultas usando predicados em um ou mais dos campos acima.<\/p>\r\n\r\n\r\n\r\n<p>EXEMPLO 1: hot\u00e9is curtidos por \"Vallie Ryan\" ou classifica\u00e7\u00e3o de servi\u00e7o superior a 4<\/p>\r\n\r\n\r\n\r\n<p>&#8216;{ <br \/>\"explain\": verdadeiro, <br \/>\"fields\": [ \"*\" ], <br \/>\"highlight\": {}, <br \/>\"query\" (consulta): { \"query\": \"+public_likes:\\\"Vallie Ryan\\\" reviews.ratings.Service:&gt;4\u2033 } <br \/>}&#8217;<\/p>\r\n\r\n\r\n\r\n<p>Defini\u00e7\u00e3o do \u00edndice completo.<\/p>\r\n\r\n<pre class=\"theme:github font-size:15 height-set:true height:700 width-set:true width:700 whitespace-before:1 whitespace-after:1 lang:js decode:true\" title=\"Defini\u00e7\u00e3o do \u00edndice\">{\r\n  \"type\": \"fulltext-index\",\r\n  \"name\": \"trmultiarrayidx\",\r\n  \"uuid\": \"7b3a85992989e196\",\r\n  \"sourceType\": \"couchbase\",\r\n  \"sourceName\": \"travel-sample\",\r\n  \"sourceUUID\": \"ddd78a53e740e6a8274e13c990b47abc\",\r\n  \"planParams\": {\r\n    \"maxPartitionsPerPIndex\": 171\r\n  },\r\n  \"params\": {\r\n    \"doc_config\": {\r\n      \"docid_prefix_delim\": \"\",\r\n      \"docid_regexp\": \"\",\r\n      \"mode\": \"type_field\",\r\n      \"type_field\": \"type\"\r\n    },\r\n    \"mapping\": {\r\n      \"analysis\": {},\r\n      \"default_analyzer\": \"standard\",\r\n      \"default_datetime_parser\": \"dateTimeOptional\",\r\n      \"default_field\": \"_all\",\r\n      \"default_mapping\": {\r\n        \"dynamic\": true,\r\n        \"enabled\": false\r\n      },\r\n      \"default_type\": \"_default\",\r\n      \"docvalues_dynamic\": true,\r\n      \"index_dynamic\": true,\r\n      \"store_dynamic\": false,\r\n      \"type_field\": \"_type\",\r\n      \"types\": {\r\n        \"hotel\": {\r\n          \"dynamic\": false,\r\n          \"enabled\": true,\r\n          \"properties\": {\r\n            \"public_likes\": {\r\n              \"dynamic\": false,\r\n              \"enabled\": true,\r\n              \"fields\": [\r\n                {\r\n                  \"docvalues\": true,\r\n                  \"include_in_all\": true,\r\n                  \"include_term_vectors\": true,\r\n                  \"index\": true,\r\n                  \"name\": \"public_likes\",\r\n                  \"type\": \"text\"\r\n                }\r\n              ]\r\n            },\r\n            \"reviews.author\": {\r\n              \"dynamic\": false,\r\n              \"enabled\": true,\r\n              \"fields\": [\r\n                {\r\n                  \"docvalues\": true,\r\n                  \"include_in_all\": true,\r\n                  \"include_term_vectors\": true,\r\n                  \"index\": true,\r\n                  \"name\": \"reviews.author\",\r\n                  \"type\": \"text\"\r\n                }\r\n              ]\r\n            },\r\n            \"reviews.ratings.Location\": {\r\n              \"dynamic\": false,\r\n              \"enabled\": true,\r\n              \"fields\": [\r\n                {\r\n                  \"docvalues\": true,\r\n                  \"include_in_all\": true,\r\n                  \"include_term_vectors\": true,\r\n                  \"index\": true,\r\n                  \"name\": \"reviews.ratings.Location\",\r\n                  \"type\": \"text\"\r\n                }\r\n              ]\r\n            },\r\n            \"reviews.ratings.Service\": {\r\n              \"dynamic\": false,\r\n              \"enabled\": true,\r\n              \"fields\": [\r\n                {\r\n                  \"docvalues\": true,\r\n                  \"include_in_all\": true,\r\n                  \"include_term_vectors\": true,\r\n                  \"index\": true,\r\n                  \"name\": \"reviews.ratings.Service\",\r\n                  \"type\": \"text\"\r\n                }\r\n              ]\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    \"store\": {\r\n      \"indexType\": \"scorch\",\r\n      \"kvStoreName\": \"\"\r\n    }\r\n  },\r\n  \"sourceParams\": {}\r\n}<\/pre>\r\n<p>&nbsp;<\/p>\r\n\r\n<p><strong>7. v\u00e1rias consultas, \u00edndice \u00fanico.<\/strong><\/p>\r\n\r\n\r\n\r\n<p><em>\"\u00c0s vezes, as consultas s\u00e3o como uma caixa de chocolates. Voc\u00ea n\u00e3o sabe qual consulta vai receber.\"<\/em> Quando se deseja expor os dados a usu\u00e1rios corporativos que podem fazer consultas ad hoc, n\u00e3o \u00e9 poss\u00edvel criar todo tipo de \u00edndice para acelerar todo tipo de consulta. O ajuste de desempenho requer uma abordagem diferente.<\/p>\r\n\r\n\r\n\r\n<p>Considere o \u00edndice criado na se\u00e7\u00e3o (2) acima sobre os 5 campos:<\/p>\r\n\r\n\r\n\r\n<ol class=\"wp-block-list\">\r\n<li>cidade<\/li>\r\n<li>pa\u00eds<\/li>\r\n<li>nome<\/li>\r\n<li>public_likes (um campo de matriz)<\/li>\r\n<li>descri\u00e7\u00e3o<\/li>\r\n<\/ol>\r\n\r\n\r\n\r\n<p>Se voc\u00ea criasse uma \u00e1rvore B (\u00edndice GSI no caso do Couchbsae), ela teria a seguinte apar\u00eancia:<\/p>\r\n\r\n\r\n\r\n<p>CREATE INDEX itravel ON `travel-sample`(city, country, name, DISTINCT public_likes, description) WHERE type = &#8216;hotel&#8217;;<\/p>\r\n\r\n\r\n\r\n<p>As consultas que se beneficiariam com isso s\u00e3o as seguintes <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/create-right-index-get-right-performance\/\">regras explicadas aqui<\/a>. O principal problema \u00e9 que cada bloco de consulta (especificamente a varredura do \u00edndice) ter\u00e1 de usar predicados nas principais chaves do \u00edndice. Isso limita a efic\u00e1cia do \u00edndice.<\/p>\r\n\r\n\r\n\r\n<p>Com o \u00edndice search(FTS) criado acima, voc\u00ea pode fazer consultas com base em quaisquer conjutos, disjuntos, must have etc. com qualquer combina\u00e7\u00e3o. Com consultas complexas, a pesquisa pode levar mais do que alguns milissegundos, mas voc\u00ea est\u00e1 fazendo tudo isso em um \u00fanico \u00edndice. A flexibilidade com o uso razo\u00e1vel de recursos torna o \u00edndice de pesquisa muito valioso.<\/p>\r\n\r\n\r\n\r\n<p><strong>Observa\u00e7\u00e3o: Na pr\u00f3xima vers\u00e3o 6.5 do Couchbase, facilitamos a consulta usando o \u00edndice de pesquisa. Binh Le explicou isso neste artigo:<\/strong><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/n1ql-and-search-how-to-leverage-fts-index-in-n1ql-query\/\">https:\/\/www.couchbase.com\/blog\/n1ql-and-search-how-to-leverage-fts-index-in-n1ql-query\/<\/a><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>Refer\u00eancias<\/strong><\/h2>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Documenta\u00e7\u00e3o do Couchbase: <a href=\"https:\/\/docs.couchbase.com\/server\/6.0\/fts\/full-text-intro.html\">https:\/\/docs.couchbase.com\/server\/6.0\/fts\/full-text-intro.html<\/a><\/li>\r\n<li>Recursos de pesquisa do Couchbase: <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/full-text-search\/\">https:\/\/www.couchbase.com\/products\/full-text-search<\/a><\/li>\r\n<li>Treinamento on-line do Couchbase FTS: <a href=\"https:\/\/learn.couchbase.com\/store\/509465-cb121-intro-to-couchbase-full-text-search-fts\">https:\/\/learn.couchbase.com\/store\/509465-cb121-intro-to-couchbase-full-text-search-fts<\/a><\/li>\r\n<li>Blogs do Couchbase: <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/category\/full-text-search\/\">https:\/\/www.couchbase.com\/blog\/category\/full-text-search\/<\/a><\/li>\r\n<li>Compara\u00e7\u00e3o da pesquisa de texto do Couchbase e do MongoDB: <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/searching-json-comparing-text-search-in-couchbase-and-mongodb\/\">https:\/\/www.couchbase.com\/blog\/searching-json-comparing-text-search-in-couchbase-and-mongodb\/<\/a><\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>People don\u2019t want a four key index. \u00a0They need a four-ms response. Ted Levitt Application development is demanding. Each application is trying to progress on behalf of the customer &#8212; searching for the right product or the right form, ordering, [&hellip;]<\/p>","protected":false},"author":55,"featured_media":6476,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,2165,9417,1812],"tags":[1309],"ppma_author":[8929],"class_list":["post-6738","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-full-text-search","category-performance","category-n1ql-query","tag-mongodb"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Search &amp; Rescue: 7 Reasons N1QL Developers Use Search<\/title>\n<meta name=\"description\" content=\"Couchbase N1QL\/SQL can call full-text search queries, providing powerful benefits described here including fuzzy and natural language matching.\" \/>\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\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Search &amp; Rescue: 7 Reasons N1QL Developers Use Search\" \/>\n<meta property=\"og:description\" content=\"Couchbase N1QL\/SQL can call full-text search queries, providing powerful benefits described here including fuzzy and natural language matching.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-04-23T06:46:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:59:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/03\/Screen-Shot-2019-03-02-at-7.59.02-PM-1024x542.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"542\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Keshav Murthy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@rkeshavmurthy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Keshav Murthy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/\"},\"author\":{\"name\":\"Keshav Murthy\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c261644262bf98e146372fe647682636\"},\"headline\":\"Search &amp; Rescue: 7 Reasons N1QL Developers Use Search\",\"datePublished\":\"2019-04-23T06:46:13+00:00\",\"dateModified\":\"2025-06-14T03:59:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/\"},\"wordCount\":1915,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/03\/Screen-Shot-2019-03-02-at-7.59.02-PM.png\",\"keywords\":[\"mongodb\"],\"articleSection\":[\"Application Design\",\"Full-Text Search\",\"High Performance\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/\",\"name\":\"Search &amp; Rescue: 7 Reasons N1QL Developers Use Search\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/03\/Screen-Shot-2019-03-02-at-7.59.02-PM.png\",\"datePublished\":\"2019-04-23T06:46:13+00:00\",\"dateModified\":\"2025-06-14T03:59:10+00:00\",\"description\":\"Couchbase N1QL\/SQL can call full-text search queries, providing powerful benefits described here including fuzzy and natural language matching.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/03\/Screen-Shot-2019-03-02-at-7.59.02-PM.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/03\/Screen-Shot-2019-03-02-at-7.59.02-PM.png\",\"width\":2048,\"height\":1083},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Search &amp; Rescue: 7 Reasons N1QL Developers Use Search\"}]},{\"@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\/c261644262bf98e146372fe647682636\",\"name\":\"Keshav Murthy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4e51d72fc07c662aa791316deafffac4\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g\",\"caption\":\"Keshav Murthy\"},\"description\":\"Keshav Murthy is a Vice President at Couchbase R&amp;D. Previously, he was at MapR, IBM, Informix, Sybase, with more than 20 years of experience in database design &amp; development. He lead the SQL and NoSQL R&amp;D team at IBM Informix. He has received two President's Club awards at Couchbase, two Outstanding Technical Achievement Awards at IBM. Keshav has a bachelor's degree in Computer Science and Engineering from the University of Mysore, India, holds eleven US patents and has four US patents pending.\",\"sameAs\":[\"https:\/\/blog.planetnosql.com\/\",\"https:\/\/x.com\/rkeshavmurthy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/keshav-murthy\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Busca e resgate: 7 raz\u00f5es pelas quais os desenvolvedores de N1QL usam a pesquisa","description":"O Couchbase N1QL\/SQL pode chamar consultas de pesquisa de texto completo, fornecendo benef\u00edcios avan\u00e7ados descritos aqui, incluindo correspond\u00eancia de linguagem natural e difusa.","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\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/","og_locale":"pt_BR","og_type":"article","og_title":"Search &amp; Rescue: 7 Reasons N1QL Developers Use Search","og_description":"Couchbase N1QL\/SQL can call full-text search queries, providing powerful benefits described here including fuzzy and natural language matching.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-04-23T06:46:13+00:00","article_modified_time":"2025-06-14T03:59:10+00:00","og_image":[{"width":1024,"height":542,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/03\/Screen-Shot-2019-03-02-at-7.59.02-PM-1024x542.png","type":"image\/png"}],"author":"Keshav Murthy","twitter_card":"summary_large_image","twitter_creator":"@rkeshavmurthy","twitter_misc":{"Written by":"Keshav Murthy","Est. reading time":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/"},"author":{"name":"Keshav Murthy","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c261644262bf98e146372fe647682636"},"headline":"Search &amp; Rescue: 7 Reasons N1QL Developers Use Search","datePublished":"2019-04-23T06:46:13+00:00","dateModified":"2025-06-14T03:59:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/"},"wordCount":1915,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/03\/Screen-Shot-2019-03-02-at-7.59.02-PM.png","keywords":["mongodb"],"articleSection":["Application Design","Full-Text Search","High Performance","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/","url":"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/","name":"Busca e resgate: 7 raz\u00f5es pelas quais os desenvolvedores de N1QL usam a pesquisa","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/03\/Screen-Shot-2019-03-02-at-7.59.02-PM.png","datePublished":"2019-04-23T06:46:13+00:00","dateModified":"2025-06-14T03:59:10+00:00","description":"O Couchbase N1QL\/SQL pode chamar consultas de pesquisa de texto completo, fornecendo benef\u00edcios avan\u00e7ados descritos aqui, incluindo correspond\u00eancia de linguagem natural e difusa.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/03\/Screen-Shot-2019-03-02-at-7.59.02-PM.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/03\/Screen-Shot-2019-03-02-at-7.59.02-PM.png","width":2048,"height":1083},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/search-and-rescue-7-reasons-for-n1ql-sql-developers-to-use-search\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Search &amp; Rescue: 7 Reasons N1QL Developers Use Search"}]},{"@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\/c261644262bf98e146372fe647682636","name":"Keshav Murthy","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/4e51d72fc07c662aa791316deafffac4","url":"https:\/\/secure.gravatar.com\/avatar\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g","caption":"Keshav Murthy"},"description":"Keshav Murthy \u00e9 vice-presidente de P&amp;D da Couchbase. Anteriormente, ele trabalhou na MapR, IBM, Informix e Sybase, com mais de 20 anos de experi\u00eancia em design e desenvolvimento de bancos de dados. Ele liderou a equipe de P&amp;D de SQL e NoSQL na IBM Informix. Ele recebeu dois pr\u00eamios President's Club na Couchbase e dois Outstanding Technical Achievement Awards na IBM. Keshav \u00e9 bacharel em Ci\u00eancia da Computa\u00e7\u00e3o e Engenharia pela Universidade de Mysore, \u00cdndia, det\u00e9m onze patentes nos EUA e tem quatro patentes pendentes nos EUA.","sameAs":["https:\/\/blog.planetnosql.com\/","https:\/\/x.com\/rkeshavmurthy"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/keshav-murthy\/"}]}},"authors":[{"term_id":8929,"user_id":55,"is_guest":0,"slug":"keshav-murthy","display_name":"Keshav Murthy","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g","author_category":"","last_name":"Murthy","first_name":"Keshav","job_title":"","user_url":"https:\/\/blog.planetnosql.com\/","description":"Keshav Murthy \u00e9 vice-presidente de P&amp;D da Couchbase. Anteriormente, ele trabalhou na MapR, IBM, Informix e Sybase, com mais de 20 anos de experi\u00eancia em design e desenvolvimento de bancos de dados. Ele liderou a equipe de P&amp;D de SQL e NoSQL na IBM Informix. Recebeu dois pr\u00eamios President's Club na Couchbase e dois Outstanding Technical Achievement Awards na IBM. Keshav \u00e9 bacharel em Ci\u00eancia da Computa\u00e7\u00e3o e Engenharia pela Universidade de Mysore, \u00cdndia, det\u00e9m dez patentes nos EUA e tem tr\u00eas patentes pendentes nos EUA."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/6738","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\/55"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=6738"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/6738\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/6476"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=6738"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=6738"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=6738"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=6738"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}