{"id":9025,"date":"2020-08-12T09:00:13","date_gmt":"2020-08-12T16:00:13","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=9025"},"modified":"2025-06-13T20:27:37","modified_gmt":"2025-06-14T03:27:37","slug":"announcing-flex-index-with-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/announcing-flex-index-with-couchbase\/","title":{"rendered":"Anunciando o Flex Index com o Couchbase"},"content":{"rendered":"<h2><span style=\"font-weight: 400\">Explica\u00e7\u00e3o do Flex Index<\/span><\/h2>\n<p><span style=\"font-weight: 400\">O que \u00e9 um Flex Index? Uma das principais tarefas de um mecanismo de banco de dados \u00e9 como gerenciar com efici\u00eancia a pesquisa e a recupera\u00e7\u00e3o dos dados nele contidos. A efici\u00eancia e o equil\u00edbrio entre o consumo de recursos e o desempenho s\u00e3o os aspectos mais importantes de qualquer banco de dados. Diferentes tipos de \u00edndices de banco de dados, por exemplo, B-Tree, Inverted, Graph e Spatial, etc., s\u00e3o projetados para atender a diferentes requisitos de pesquisa. Embora os \u00edndices sejam essenciais para o desempenho da pesquisa, a escolha do tipo de \u00edndice adequado a ser usado tamb\u00e9m pode fazer uma grande diferen\u00e7a em sua efic\u00e1cia. Porque o melhor tipo de \u00edndice \u00e9 geralmente ditado pela caracter\u00edstica do elemento de dados que est\u00e1 sendo indexado.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">No Couchbase, o \u00cdndice Secund\u00e1rio Global usa uma estrutura B-Tree para pesquisa r\u00e1pida exata e de intervalo, e a Pesquisa de Texto Completo usa a estrutura de \u00edndice invertido para fornecer pesquisa eficiente de termos.  Al\u00e9m de ser altamente dimension\u00e1vel, cada um desses tipos de \u00edndice tamb\u00e9m oferece seus pr\u00f3prios recursos exclusivos. O B-Tree \u00e9 o \u00edndice mais comumente usado para valores de alta seletividade (ou seja, mais distintos, como n\u00famero de pedido), enquanto os \u00edndices invertidos s\u00e3o mais bem utilizados para indexar conte\u00fado textual, em que o termo pesquis\u00e1vel provavelmente tem baixa seletividade.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Os aplicativos que interagem diretamente com os usu\u00e1rios precisam de recursos de pesquisa e, na maioria das vezes, esses aplicativos exigem tanto a pesquisa exata quanto a pesquisa de texto. Esses recursos de pesquisa geralmente est\u00e3o dispon\u00edveis por meio de diferentes servi\u00e7os de pesquisa e como APIs de pesquisa separadas, o que, por sua vez, pode aumentar a complexidade do desenvolvimento do aplicativo.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Para atender a essa necessidade, o Couchbase introduziu a fun\u00e7\u00e3o N1QL SEARCH() na vers\u00e3o 6.5. Ela permite que a consulta N1QL use tanto o predicado SQL para pesquisa exata e de intervalo quanto SEARCH() para pesquisa de texto, em que os resultados n\u00e3o s\u00e3o apenas predicados pelo termo de pesquisa, mas tamb\u00e9m por sua pontua\u00e7\u00e3o de relev\u00e2ncia. Isso adiciona um fator de imprecis\u00e3o \u00e0 pesquisa, bem como recursos de reconhecimento de linguagem.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O recurso N1QL SEARCH(), pela primeira vez, permite que os aplicativos acessem ambos os servi\u00e7os de pesquisa de consulta a partir de uma \u00fanica API, usando a linguagem N1QL do Couchbase. Essa integra\u00e7\u00e3o oferece muitas vantagens. A principal delas \u00e9 a simplifica\u00e7\u00e3o do processo de desenvolvimento de aplicativos por n\u00e3o precisar lidar com APIs diferentes, mas tamb\u00e9m por delegar mais do processamento de pesquisa aos servi\u00e7os de back-end.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">No Couchbase 6.6, levamos essa integra\u00e7\u00e3o N1QL\/FTS um passo adiante com<\/span><b> \u00cdndice do Couchbase Flex<\/b><span style=\"font-weight: 400\">.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">O que \u00e9 o Flex Index?<\/span><\/h2>\n<p><span style=\"font-weight: 400\">O \u00edndice flex\u00edvel \u00e9 um recurso do servi\u00e7o de consulta do Couchbase para aproveitar os recursos de pesquisa, usando apenas o predicado N1QL padr\u00e3o. Isso significa que voc\u00ea n\u00e3o precisa usar a sintaxe do FTS nem a fun\u00e7\u00e3o SEARCH() para que sua consulta N1QL aproveite os \u00edndices do FTS.\u00a0<\/span><\/p>\n<p>O suporte ao tipo de dados de pesquisa inclui texto, data e hora, num\u00e9rico e booleano. Mas, para texto, somente a pesquisa por palavra-chave \u00e9 suportada.<\/p>\n<p><b>Pesquisa de palavras-chave -<\/b><span style=\"font-weight: 400\"> refere-se \u00e0 maneira como um campo de texto \u00e9 processado antes de ser adicionado a um \u00edndice. \u00cdndice FTS usando o <code>padr\u00e3o<\/code> analisaria o texto em termos individuais antes da indexa\u00e7\u00e3o, enquanto o analisador <code>palavra-chave<\/code> O analisador usa o texto inteiro para o \u00edndice.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Ent\u00e3o, para entender como o Flex Index funciona, digamos que voc\u00ea tenha uma consulta com esta condi\u00e7\u00e3o de pesquisa:  Encontrar todas as atividades em um sistema de gerenciamento de atividades de vendas em que as atividades envolveram o cliente \"Horizon Communications\", aconteceram em agosto de 2020 e ocorreram durante um evento de marketing no Moscone Center.\u00a0<\/span><\/p>\n<pre class=\"lang:pgsql decode:true\">SELECT * FROM crm\u00a0\r\n\u00a0 WHERE type='activity'\r\n\u00a0 \u00a0 AND event.location = 'Moscone Center'\r\n\u00a0 \u00a0 AND account.name = 'Horizon Communications'\r\n\u00a0 \u00a0 AND act_date BETWEEN '2020-08-01' AND '2020-08-31'<\/pre>\n<p><span style=\"font-weight: 400\">Suponha tamb\u00e9m que voc\u00ea tenha esse \u00edndice GSI :\u00a0<\/span><\/p>\n<pre class=\"lang:pgsql decode:true\">CREATE INDEX adv_account_name_event_site_actdate\r\nON `crm`(`account`.`name`,`event`.`location`,`act_date`)\r\n\u00a0 \u00a0 WHERE type='activity'<\/pre>\n<p>Essa consulta, da forma como foi escrita, aproveitar\u00e1 o \u00edndice GSI acima porque:<\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Todos os predicados de consulta s\u00e3o cobertos pelo \u00edndice.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">A consulta tamb\u00e9m tem o predicado <code>tipo<\/code>='atividade' que corresponde ao filtro do \u00edndice.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">In fact, the index will be considered as long as the leading key `account`.`name` is one of the predicates, and that the query is restricted to <code>tipo<\/code>='atividade'.<\/span><\/li>\n<\/ol>\n<h5>Plano de consulta:<\/h5>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9026\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/Screen-Shot-2020-08-03-at-1.08.35-PM.png\" alt=\"\" width=\"937\" height=\"104\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.08.35-PM.png 937w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.08.35-PM-300x33.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.08.35-PM-768x85.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.08.35-PM-20x2.png 20w\" sizes=\"auto, (max-width: 937px) 100vw, 937px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Com<\/span><b> \u00cdndice Flex<\/b><span style=\"font-weight: 400\">Agora, voc\u00ea tem a op\u00e7\u00e3o de solicitar que o servi\u00e7o de consulta considere o uso do \u00edndice FTS para a consulta.\u00a0<\/span><\/p>\n<pre class=\"font:monospace lang:default decode:true\">SELECT * FROM crm  USE INDEX (USING FTS)\r\n   WHERE type='activity'\r\n     AND event.site = 'Moscone Center'\r\n     AND account.name = 'Horizon Communications' \r\n     AND act_date BETWEEN '2020-08-01' AND '2020-08-31'<\/pre>\n<p><span style=\"font-weight: 400\">A adi\u00e7\u00e3o do \"<\/span><b>\u00cdNDICE DE USO (USANDO FTS)<\/b><span style=\"font-weight: 400\">A dica \" sugere que o servi\u00e7o de consulta considere o uso de qualquer \u00edndice FTS, se houver um dispon\u00edvel que possa ajudar na consulta.\u00a0\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">E se voc\u00ea tiver um \u00edndice FTS definido como abaixo:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9028\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/Screen-Shot-2020-08-03-at-1.13.31-PM.png\" alt=\"\" width=\"532\" height=\"448\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.13.31-PM.png 532w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.13.31-PM-300x253.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.13.31-PM-20x17.png 20w\" sizes=\"auto, (max-width: 532px) 100vw, 532px\" \/><\/p>\n<p><span style=\"font-weight: 400\">The `a<\/span><span style=\"font-weight: 400\">ct_search`<\/span><span style=\"font-weight: 400\">\u00a0tem a seguinte defini\u00e7\u00e3o:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">It has a `type` mapping that restricts the index content to include only the documents of <code>tipo<\/code> = 'atividade'.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Ele inclui o campo filho <code>data_do_ato<\/code>.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Ele inclui os dois mapeamentos filhos para <code>conta<\/code> e <code>evento<\/code> objetos.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Observe que ele usa o <code>palavra-chave<\/code> analisador.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">Nesse caso, o <\/span><span style=\"font-weight: 400\">`act_search` <\/span><span style=\"font-weight: 400\">\u00e9 perfeito para a consulta N1QL acima, e com o<\/span> <b>\u00cdNDICE DE USO (USANDO FTS)<\/b> <span style=\"font-weight: 400\">a consulta poder\u00e1 usar a dica <\/span><span style=\"font-weight: 400\">`act_search`<\/span><span style=\"font-weight: 400\"> \u00cdndice FTS.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Plano de consulta:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9029\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/Screen-Shot-2020-08-03-at-1.16.51-PM.png\" alt=\"\" width=\"898\" height=\"87\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.16.51-PM.png 1053w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.16.51-PM-300x29.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.16.51-PM-1024x99.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.16.51-PM-768x74.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.16.51-PM-20x2.png 20w\" sizes=\"auto, (max-width: 898px) 100vw, 898px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Em resumo, <strong>\u00cdndice do Couchbase Flex<\/strong> oferece a possibilidade de a consulta N1QL com a sintaxe de predicado N1QL padr\u00e3o aproveitar de forma transparente o \u00edndice GSI ou FTS <\/span><b><i>sem nenhuma modifica\u00e7\u00e3o nos comandos N1QL<\/i><\/b><span style=\"font-weight: 400\">.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Mas o valor do Flex Index n\u00e3o vem apenas com a sintaxe mais simples para usar o FTS, mas tamb\u00e9m com a versatilidade do \u00edndice FTS, alguns dos quais ser\u00e3o descritos nas se\u00e7\u00f5es subsequentes.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Ent\u00e3o, quando voc\u00ea deve usar o Flex Index?<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Em alto n\u00edvel, <strong>\u00cdndice de flexibilidade<\/strong> pode resolver muitos desafios frequentemente encontrados em aplicativos que fornecem pesquisas.<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Onde as condi\u00e7\u00f5es de pesquisa das instru\u00e7\u00f5es N1QL n\u00e3o s\u00e3o predeterminadas, o que significa que podem conter n\u00fameros variados de predicados, muitas vezes com base nas sele\u00e7\u00f5es do usu\u00e1rio. E \u00e9 dif\u00edcil criar \u00edndices para cobrir todas as condi\u00e7\u00f5es de pesquisa.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Aplicativos que fornecem recursos de pesquisa envolvendo um grande n\u00famero de predicados, com operadores l\u00f3gicos, como combina\u00e7\u00f5es AND\/OR nas condi\u00e7\u00f5es de pesquisa.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Quando as condi\u00e7\u00f5es de pesquisa envolvem predicados sobre elementos hier\u00e1rquicos do documento, como a pesquisa que envolve elementos de matriz em uma matriz ou em v\u00e1rias matrizes.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Quando os aplicativos exigem o poder do FTS, mas tamb\u00e9m precisam de agrega\u00e7\u00e3o SQL e JOIN para incluir informa\u00e7\u00f5es relacionadas de outros objetos.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Ou voc\u00ea simplesmente deseja usar a sintaxe de predicado N1QL em vez da sintaxe FTS.<\/span><\/li>\n<\/ol>\n<p><strong><em>Note that Flex Index can also be used retrospectively on existing applications by adding the `use_fts` parameter to the query API calls.\u00a0<\/em><\/strong><\/p>\n<h3><span style=\"font-weight: 400\">1) Os padr\u00f5es de pesquisa n\u00e3o s\u00e3o predeterminados<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Quando se trata de fornecer recursos de pesquisa para os usu\u00e1rios finais, o desafio sempre foi saber o que permitir que o usu\u00e1rio pesquise. As diretrizes padr\u00e3o determinam que a decis\u00e3o seja tomada com base nas necessidades dos usu\u00e1rios. Por\u00e9m, em sistemas complexos, em que os campos pesquis\u00e1veis geralmente n\u00e3o se limitam a alguns campos-chave, mas podem abranger todos os campos de um objeto, a decis\u00e3o sobre a pesquisa geralmente \u00e9 orientada pelo que o sistema de banco de dados subjacente pode suportar.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Os aplicativos que se baseiam no \u00edndice B-Tree tradicional para pesquisa r\u00e1pida geralmente ficam aqu\u00e9m quando se trata de fornecer uma estrutura flex\u00edvel para esse tipo de requisito de pesquisa.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Considere este documento:<\/span><\/p>\n<pre class=\"lang:js decode:true\">\"activity\" : {\r\n\u00a0 \"id\": \"act1000\",\r\n\u00a0 \"title\": \"Announcing Couchbase Flex Index CB6.6\",\r\n\u00a0 \"reference\": \"24-i2y5J3928\",\r\n\u00a0 \"dept\": \"st55\",\r\n\u00a0 \"region\": \"00528\",\r\n\u00a0 \"notes\": \"Review the 100 N1QL Flex Index queries that ElasticSQL cannot do. The important point here is that Couchbase has integrated Text Search capability into its N1QL. Whereas ElasticSearch, relatively new SQL, has added SQL to its search engine....\",\r\n\u00a0 \"owner\": {\r\n\u00a0 \u00a0 \"id\": \"usr24\",\r\n\u00a0 \u00a0 \"name\": \"John Higgins\"\r\n\u00a0 },\r\n\u00a0 \"priority\": \"Medium\",\r\n\u00a0 \"act_type\": \"Appointment\",\r\n\u00a0 \"event\": {\r\n\u00a0 \u00a0 \"name\": \"N1QL Flex Index vs. ElasticSQL\",\r\n\u00a0 \u00a0 \"location\": \"Moscone Center\",\r\n\u00a0 \u00a0 \"theme\": \"CouchbaseRed\",\r\n\u00a0 \u00a0 \"vendor\": \"Kempinski\"\r\n\u00a0 },\r\n\u00a0 \"account\": {\r\n\u00a0 \u00a0 \"id\": \"acc134\",\r\n\u00a0 \u00a0 \"name\": \"Horizon Communications\"\r\n\u00a0 },\r\n\u00a0 \"act_date\": \"2020-08-06\",\r\n\u00a0 \"appointment\": {\r\n\u00a0 \u00a0 \"duration\": 90,\r\n\u00a0 \u00a0 \"start_date\": \"2020-08-06 11:00:00\",\r\n\u00a0 \u00a0 \"contacts\": [\r\n\u00a0 \u00a0 \u00a0 {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \"id\": \"contact2493\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \"title\": \"SalesRep\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \"name\": \"Miranda Sullivan\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \"email\": \"msullivan@horizoncell.com\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \"phone\": \"778-096-1351\"\r\n\u00a0 \u00a0 \u00a0 }\r\n\u00a0 ],\r\n\u00a0 \"participants\": [\r\n\u00a0 \u00a0 {\r\n\u00a0 \u00a0 \u00a0 \"role\": \"Support Analyst\",\r\n\u00a0 \u00a0 \u00a0 \"userid\": \"usr57\",\r\n\u00a0 \u00a0 \u00a0 \"name\": \"Raven Peterson\"\r\n\u00a0 \u00a0 },\r\n\u00a0 \u00a0 {\r\n\u00a0 \u00a0 \u00a0 \"role\": \"Product Specialist\",\r\n\u00a0 \u00a0 \u00a0 \"userid\": \"usr24\",\r\n\u00a0 \u00a0 \u00a0 \"name\": \"John Higgins\"\r\n\u00a0 \u00a0 }\r\n\u00a0 ],\r\n\u00a0 \"type\": \"activity\"\r\n}<\/pre>\n<p>Os 13 campos destacados s\u00e3o todos os campos poss\u00edveis que o usu\u00e1rio pode querer pesquisar. Ent\u00e3o, qual seria a estrat\u00e9gia de \u00edndice se voc\u00ea quiser fornecer aos usu\u00e1rios o recurso de pesquisa?<\/p>\n<table>\n<tbody>\n<tr>\n<td><b>Estrat\u00e9gia de \u00edndice<\/b><\/td>\n<td><b>Pr\u00f3s<\/b><\/td>\n<td><b>Contras<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">Criar 13 \u00edndices individuais<\/span><\/td>\n<td><span style=\"font-weight: 400\">1-Eficiente para pesquisa de campo \u00fanico.\u00a0<\/span><\/td>\n<td><span style=\"font-weight: 400\">1-Se mais de um campo estiver na pesquisa, ser\u00e3o usados v\u00e1rios \u00edndices, resultando em varreduras de interse\u00e7\u00e3o, o que afetar\u00e1 o desempenho<\/span><\/p>\n<p><span style=\"font-weight: 400\">2 - Cada vez mais ineficiente \u00e0 medida que mais campos de pesquisa s\u00e3o inclu\u00eddos<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">Criar um \u00edndice composto para combina\u00e7\u00f5es de pesquisa usadas com frequ\u00eancia<\/span><\/td>\n<td><span style=\"font-weight: 400\">1-Tempo de resposta r\u00e1pido<\/span><\/td>\n<td><span style=\"font-weight: 400\">1-Inflex\u00edvel, pois s\u00f3 h\u00e1 suporte para combina\u00e7\u00f5es de pesquisa espec\u00edficas.<\/span><\/p>\n<p><span style=\"font-weight: 400\">2-A interface do usu\u00e1rio do aplicativo precisa garantir que a chave principal do \u00edndice esteja presente.<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">Criar um \u00edndice composto para todas as combina\u00e7\u00f5es de pesquisa<\/span><\/td>\n<td><span style=\"font-weight: 400\">1-Tempo de resposta mais r\u00e1pido<\/span><\/td>\n<td><span style=\"font-weight: 400\">1 - O n\u00famero total de \u00edndices (13!) seria impratic\u00e1vel<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">Aproveitar o mecanismo de pesquisa - ElasticSearch ou Couchbase FTS<\/span><\/td>\n<td><span style=\"font-weight: 400\">1-Tempo de resposta r\u00e1pido<\/span><\/p>\n<p><span style=\"font-weight: 400\">2-S\u00f3 \u00e9 necess\u00e1rio um \u00fanico \u00edndice<\/span><\/td>\n<td><span style=\"font-weight: 400\">1 - Necessidade de reescrever o aplicativo para aproveitar o mecanismo de pesquisa<\/span><\/p>\n<p><span style=\"font-weight: 400\">2-C\u00f3digo de aplicativo mais complexo<\/span><\/p>\n<p><span style=\"font-weight: 400\">3-Custo de manuten\u00e7\u00e3o<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400\">A partir da lista de op\u00e7\u00f5es acima, fica claro que o recurso de pesquisa mais flex\u00edvel exigir\u00e1 o uso de um mecanismo de pesquisa, algo semelhante ao ElasticSearch ou ao Couchbase FTS. Mas, a menos que voc\u00ea tenha desenvolvido seu aplicativo especificamente com esses mecanismos de busca em mente, o esfor\u00e7o para converter a sintaxe de busca e a altera\u00e7\u00e3o das APIs n\u00e3o ser\u00e1 trivial.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">E \u00e9 a\u00ed que o valor do Couchbase Flex Index entra em cena.  Esse novo recurso permite que os desenvolvedores escrevam instru\u00e7\u00f5es de consulta N1QL usando predicados N1QL padr\u00e3o, e o servi\u00e7o de consulta aproveitar\u00e1 de forma transparente o \u00edndice FTS.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">2) Consulta com qualquer combina\u00e7\u00e3o de predicados<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Uma das principais diferen\u00e7as entre o \u00edndice GSI B-Tree e o \u00edndice FTS Text \u00e9 como os campos-chave s\u00e3o criados. O \u00edndice GSI B-Tree concatena todos os campos-chave do \u00edndice para formar a chave do n\u00f3, que \u00e9 o principal motivo pelo qual uma chave principal deve estar presente na consulta antes que o \u00edndice possa ser considerado. O \u00edndice FTS, por outro lado, cria um \u00edndice invertido separado para cada campo. Esse design permite que um \u00edndice FTS seja considerado para qualquer consulta que tenha pelo menos um dos campos indexados.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Consider the following query which has 13 different predicates, as well as the `type`=&#8217;activity predicate.\u00a0<\/span><\/p>\n<p>&nbsp;<\/p>\n<pre class=\"lang:pgsql decode:true\">SELECT * FROM crm a\r\nWHERE a.type='activity'\r\n\/* 1\u00a0 *\/ AND a.title LIKE 'Announcing Couchbase Flex Index%'\r\n\/* 2\u00a0 *\/ AND a.dept = 'st55'\r\n\/* 3\u00a0 *\/ AND a.region = '00528'\r\n\/* 4\u00a0 *\/ AND a.priority = 'High'\r\n\/* 5\u00a0 *\/ AND a.act_date BETWEEN '2020-08-01' AND '2020-08-31'\r\n\/* 6\u00a0 *\/ AND a.event.location = 'Moscone Center South'\r\n\/* 7\u00a0 *\/ AND a.event.name = 'N1QL Flex Index vs ElasticSQL'\r\n\/* 8\u00a0 *\/ AND a.event.vendor = 'Kempskinki'\r\n\/* 9\u00a0 *\/ AND a.event.theme = 'CouchbaseRed'\r\n\/* 10 *\/ AND a.account.id = 'acc134'\r\n\/* 11 *\/ AND a.account.name = 'Horizon Communications'\r\n\/* 12 *\/ AND a.owner.id = 'usr24'\r\n\/* 13 *\/ AND a.owner.name = 'John Higgins'<\/pre>\n<p><span style=\"font-weight: 400\">Para obter o melhor desempenho, voc\u00ea precisa ter um \u00edndice para a consulta, e o melhor \u00edndice a ser usado \u00e9 um \u00edndice de cobertura, conforme fornecido pelo ADVISE:<\/span><\/p>\n<pre class=\"lang:pgsql decode:true\">CREATE INDEX adv_idx13 ON crm`\r\n(`account`.`name`,`event`.`vendor`,`account`.`id`,`event`.`location`,\r\n `event`.`theme`,`priority`,`owner`.`name`,`dept`,`event`.`name`,\r\n `owner`.`id`,`region`,`act_date`,`title`) \r\nWHERE `type` = 'activity'\r\n<\/pre>\n<h5><span style=\"font-weight: 400\">Plano de consulta:<\/span><\/h5>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9030\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/Screen-Shot-2020-08-03-at-1.30.38-PM.png\" alt=\"\" width=\"989\" height=\"105\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.30.38-PM.png 989w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.30.38-PM-300x32.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.30.38-PM-768x82.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.30.38-PM-20x2.png 20w\" sizes=\"auto, (max-width: 989px) 100vw, 989px\" \/><\/p>\n<h5><span style=\"font-weight: 400\">No entanto, o que aconteceria se:<\/span><\/h5>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">The query does not have the leading key `account`.`name`?<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">A consulta tem uma combina\u00e7\u00e3o vari\u00e1vel dos 13 predicados?<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">O GSI \u00e9 o melhor \u00edndice a ser usado, desde que voc\u00ea conhe\u00e7a os predicados exatos da consulta. Entretanto, para aplicativos que precisam oferecer suporte a consultas ad hoc, em que o conjunto de predicados n\u00e3o pode ser predeterminado, \u00e9 melhor considerar o uso do FTS.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Portanto, vamos considerar o seguinte \u00edndice FTS.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9031\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/Screen-Shot-2020-08-03-at-1.32.18-PM.png\" alt=\"\" width=\"810\" height=\"850\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.32.18-PM.png 810w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.32.18-PM-286x300.png 286w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.32.18-PM-768x806.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.32.18-PM-300x315.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.32.18-PM-20x20.png 20w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/p>\n<h5><span style=\"font-weight: 400\">Observa\u00e7\u00f5es:<\/span><\/h5>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">The index contains a `type` mapping to specify that only documents with the `type` = &#8216;activity&#8217; will be included in the index. Refer to this <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/current\/fts\/fts-creating-indexes.html#specifying-type-identifiers\"><span style=\"font-weight: 400\">Mapeamentos de tipo FTS<\/span><\/a><span style=\"font-weight: 400\"> para obter mais informa\u00e7\u00f5es.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">O \u00edndice usa o analisador de palavras-chave, o que significa que o valor dos dados ser\u00e1 adicionado ao \u00edndice em sua totalidade, sem ser analisado em termos individuais.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Cada campo \u00e9 indexado individualmente da mesma forma que o \u00edndice GSI. <\/span><span style=\"font-weight: 400\">Todas as outras op\u00e7\u00f5es est\u00e3o desmarcadas, pois n\u00e3o s\u00e3o relevantes para a pesquisa de palavras-chave. Consulte este <a href=\"https:\/\/docs.couchbase.com\/server\/current\/fts\/fts-creating-indexes.html#inserting-a-child-field\">Mapeamento de crian\u00e7as FTS<\/a> para obter mais informa\u00e7\u00f5es.\u00a0<\/span><span style=\"font-weight: 400\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9032\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/Screen-Shot-2020-08-03-at-1.33.32-PM.png\" alt=\"\" width=\"555\" height=\"25\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.33.32-PM.png 555w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.33.32-PM-300x14.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.33.32-PM-20x1.png 20w\" sizes=\"auto, (max-width: 555px) 100vw, 555px\" \/><\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">Com esse \u00edndice FTS em vigor, a mesma consulta acima, mas com o <\/span><b>USE INDEX (all_acts USING FTS) <\/b><span style=\"font-weight: 400\">hint, will instruct the query service to consider using FTS index instead. Note that the index name `all_acts` is optional.<\/span><\/p>\n<pre class=\"lang:mysql decode:true\">SELECT * FROM crm a\r\nWHERE a.type='activity' USE INDEX (USING FTS) \r\n \/* 1  *\/ AND a.title LIKE 'Announcing Couchbase Flex Index%'\r\n \/* 2  *\/ AND a.dept = 'st55'\r\n \/* 3  *\/ AND a.region = '00528'\r\n \/* 4  *\/ AND a.priority = 'High'\r\n \/* 5  *\/ AND a.act_date BETWEEN '2020-08-01' AND '2020-08-31'\r\n \/* 6  *\/ AND a.event.location = 'Moscone Center' \r\n \/* 7  *\/ AND a.event.name = 'N1QL Flex Index vs ElasticSQL'\r\n \/* 8  *\/ AND a.event.vendor = 'Kempinski'\r\n \/* 9  *\/ AND a.event.theme = 'CouchbaseRed'\r\n \/* 10 *\/ AND a.account.id = 'acc134'\r\n \/* 11 *\/ AND a.account.name = 'Horizon Cellular'\r\n \/* 12 *\/ AND a.owner.id = 'usr24'\r\n \/* 13 *\/ AND a.owner.name = 'John Higgins'\r\n<\/pre>\n<h5><span style=\"font-weight: 400\">Plano de consulta:<\/span><\/h5>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9033\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/Screen-Shot-2020-08-03-at-1.39.31-PM.png\" alt=\"\" width=\"785\" height=\"70\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.39.31-PM.png 1009w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.39.31-PM-300x27.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.39.31-PM-768x69.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.39.31-PM-20x2.png 20w\" sizes=\"auto, (max-width: 785px) 100vw, 785px\" \/><\/p>\n<h5>Execu\u00e7\u00e3o de consultas:<\/h5>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9034\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/Screen-Shot-2020-08-03-at-1.52.53-PM.png\" alt=\"\" width=\"821\" height=\"50\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.52.53-PM.png 1608w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.52.53-PM-300x18.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.52.53-PM-1024x62.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.52.53-PM-768x47.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.52.53-PM-1536x94.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.52.53-PM-20x1.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-1.52.53-PM-1320x80.png 1320w\" sizes=\"auto, (max-width: 821px) 100vw, 821px\" \/><\/p>\n<p><b>Pontos importantes a serem observados<\/b><span style=\"font-weight: 400\">: A consulta pode ter qualquer n\u00famero vari\u00e1vel de predicados e em qualquer combina\u00e7\u00e3o de campos, e a consulta ainda deve considerar o \u00edndice FTS.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">3) Consulta de \u00edndice flex\u00edvel com combina\u00e7\u00f5es de operadores l\u00f3gicos - AND\/OR<\/span><\/h3>\n<p><span style=\"font-weight: 400\">O benef\u00edcio do \u00edndice FTS com rela\u00e7\u00e3o \u00e0s combina\u00e7\u00f5es de predicados tamb\u00e9m se estende ainda mais com a maneira como cada um dos campos de \u00edndice \u00e9 criado. Como cada campo indexado tem sua pr\u00f3pria estrutura invertida e como a rotina Bleve cria um mapa de bits para cada condi\u00e7\u00e3o de pesquisa, as combina\u00e7\u00f5es de predicados, como AND\/OR\/NOT, s\u00e3o processadas com muito mais efici\u00eancia em compara\u00e7\u00e3o com o intersect-scan com \u00edndice B-Tree.<\/span><\/p>\n<p><span style=\"font-weight: 400\">The example below shows that even though there are several logical operators OR in the query, the `all_acts` FTS index is still be considered.<\/span><\/p>\n<pre class=\"lang:mysql decode:true\">SELECT * FROM crm a USE INDEX (USING FTS)\r\nWHERE a.type='activity'\r\nAND ( a.dept = 'iA88'\r\n    OR a.region &gt; '59416' )\r\nAND a.priority = 'High'\r\nAND ( a.act_date BETWEEN '2018-01-01' AND '2018-08-31'\r\n    OR a.event.location = 'Moscone Center' )\r\nAND ( a.account.id = 'acc100'\r\n     OR a.owner.name = 'Amanda Morrison')\r\nLIMIT 10<\/pre>\n<h5>Plano de consulta:<\/h5>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9036\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/Screen-Shot-2020-08-03-at-2.04.34-PM.png\" alt=\"\" width=\"703\" height=\"55\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.04.34-PM.png 2124w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.04.34-PM-300x23.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.04.34-PM-1024x80.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.04.34-PM-768x60.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.04.34-PM-1536x120.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.04.34-PM-2048x160.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.04.34-PM-20x2.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.04.34-PM-1320x103.png 1320w\" sizes=\"auto, (max-width: 703px) 100vw, 703px\" \/><\/p>\n<h5><span style=\"font-weight: 400\">Execu\u00e7\u00e3o de consultas:<\/span><\/h5>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9035\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/Screen-Shot-2020-08-03-at-2.02.56-PM.png\" alt=\"\" width=\"733\" height=\"44\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.02.56-PM.png 1672w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.02.56-PM-300x18.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.02.56-PM-1024x61.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.02.56-PM-768x46.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.02.56-PM-1536x92.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.02.56-PM-20x1.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.02.56-PM-1320x79.png 1320w\" sizes=\"auto, (max-width: 733px) 100vw, 733px\" \/><\/p>\n<h3><span style=\"font-weight: 400\">4) A consulta envolve v\u00e1rios predicados de matriz\u00a0<\/span><\/h3>\n<p><span style=\"font-weight: 400\">A versatilidade do \u00edndice FTS n\u00e3o se limita \u00e0 sua capacidade de usar o \u00edndice com apenas um subconjunto dos campos indexados na condi\u00e7\u00e3o de pesquisa ou \u00e0 sua capacidade de combinar eficientemente os resultados da pesquisa com operadores l\u00f3gicos. Mas tamb\u00e9m a maneira como o \u00edndice FTS lida com elementos de matriz, o que permite que a consulta N1QL tenha qualquer n\u00famero de predicados de matriz.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Agora vamos ampliar a consulta com predicados de matriz:<\/span><\/p>\n<pre class=\"lang:mysql decode:true\">SELECT * FROM crm a\r\nWHERE a.type='activity' USE INDEX (USING FTS) \r\n \/* 1  *\/ AND a.title LIKE 'Announcing Couchbase Flex Index%'\r\n \/* 2  *\/ AND a.dept = 'st55'\r\n \/* 3  *\/ AND a.region = '00528'\r\n \/* 4  *\/ AND a.priority = 'High'\r\n \/* 5  *\/ AND a.act_date BETWEEN '2020-08-01' AND '2020-08-31'\r\n \/* 6  *\/ AND a.event.location = 'Moscone Center South' \r\n \/* 7  *\/ AND a.event.name = 'N1QL Flex Index vs ElasticSQL'\r\n \/* 8  *\/ AND a.event.vendor = 'Kempskinki'\r\n \/* 9  *\/ AND a.event.theme = 'CouchbaseRed'\r\n \/* 10 *\/ AND a.account.id = 'acc134'\r\n \/* 11 *\/ AND a.account.name = 'Horizon Cellular'\r\n \/* 12 *\/ AND a.owner.id = 'usr24'\r\n \/* 13 *\/ AND a.owner.name = 'Binh Le'\r\n\r\n \/* 14 *\/ AND ANY pa IN a.participants SATISFIES pa.name LIKE 'Randy%' END\r\n \/* 15 *\/ AND ANY co IN a.appointment.contacts SATISFIES co.title LIKE 'System Arch%' END<\/pre>\n<p>Voc\u00ea precisa adicionar as duas matrizes ao \u00edndice como mapeamentos filhos, conforme abaixo.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9037\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/Screen-Shot-2020-08-03-at-2.09.29-PM.png\" alt=\"\" width=\"625\" height=\"347\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.09.29-PM.png 1060w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.09.29-PM-300x166.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.09.29-PM-1024x568.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.09.29-PM-768x426.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.09.29-PM-20x11.png 20w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/p>\n<h3><span style=\"font-weight: 400\">5) A sintaxe de pesquisa de diferen\u00e7as<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Esse \u00e9 um caso de uso em que voc\u00ea est\u00e1 usando o FTS principalmente com pesquisa por palavra-chave e prefere uma sintaxe de predicado de pesquisa mais simples, como a do SQL.<br \/>\n<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-9041\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/Screen-Shot-2020-08-03-at-2.46.07-PM.png\" alt=\"\" width=\"637\" height=\"279\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.46.07-PM.png 637w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.46.07-PM-300x131.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.46.07-PM-20x9.png 20w\" sizes=\"auto, (max-width: 637px) 100vw, 637px\" \/><\/p>\n<h2><span style=\"font-weight: 400\">N1QL e pesquisa sem limita\u00e7\u00f5es<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Os aplicativos corporativos modernos exigem tanto a pesquisa exata quanto a pesquisa de texto. Para a pesquisa exata, a maioria dos RDBMS fornece um \u00edndice baseado em B-Tree para atender \u00e0s necessidades. Os requisitos de pesquisa de texto aumentaram a popularidade dos mecanismos de pesquisa baseados em Lucene, como o ElasticSearch e o Solr.<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">O Oracle NoSQL agora tem integra\u00e7\u00e3o com o ElasticSearch: <\/span><a href=\"https:\/\/docs.oracle.com\/en\/database\/other-databases\/nosql-database\/18.1\/full-text-search\/index.html#NSFTL-GUID-E409CC44-9A8F-4043-82C8-6B95CD939296\">https:\/\/docs.oracle.com\/en\/database\/other-databases\/nosql-database\/18.1\/full-text-search\/index.html#NSFTL-GUID-E409CC44-9A8F-4043-82C8-6B95CD939296<\/a><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Os aplicativos baseados no Oracle Enterprise RDBMS tamb\u00e9m oferecem o recurso ElasticSearch como uma op\u00e7\u00e3o usando o pacote de aplicativos CX. <a href=\"https:\/\/www.oracle.com\/webfolder\/technetwork\/tutorials\/tutorial\/cloud\/r13\/wn\/engagement\/releases\/20B\/20B-engagement-wn.htm\">https:\/\/www.oracle.com\/webfolder\/technetwork\/tutorials\/tutorial\/cloud\/r13\/wn\/engagement\/releases\/20B\/20B-engagement-wn.htm<\/a><\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">Mas a ado\u00e7\u00e3o da funcionalidade do ElasticSearch em um modelo de dados RDBMS altamente normalizado traz uma s\u00e9rie de desafios.<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Os requisitos de recursos para configurar o ElasticSearch, bem como os requisitos de armazenamento para ingerir os dados do RDBMS para o banco de dados do ElasticSearch.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">A necessidade de desnormalizar amplamente o modelo de dados, pois a pesquisa baseada em Lucene n\u00e3o oferece suporte a JOIN de banco de dados.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">O esfor\u00e7o de desenvolvimento para implementar a busca usando as APIs do ElasticSearch.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">O esfor\u00e7o dos clientes que desejam usar o ElasticSearch \u00e9 um dos principais motivos pelos quais vimos a ado\u00e7\u00e3o do SQL nesses bancos de dados NoSQL.<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Elasticsearch com SQL. <a href=\"https:\/\/www.elastic.co\/what-is\/elasticsearch-sql\">https:\/\/www.elastic.co\/what-is\/elasticsearch-sql<\/a><\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Opendistro para Elasticsearch com SQL. <a href=\"https:\/\/opendistro.github.io\/for-elasticsearch\/features\/SQL%20Support.html\">https:\/\/opendistro.github.io\/for-elasticsearch\/features\/SQL%20Support.html<\/a><\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">O MongoDB adicionou a pesquisa ao MQL usando o Lucene em sua oferta do Atlas. <a href=\"https:\/\/www.mongodb.com\/atlas\/search\">https:\/\/www.mongodb.com\/atlas\/search<\/a><\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">Mas as implementa\u00e7\u00f5es SQL desses bancos de dados v\u00eam com uma longa lista de limita\u00e7\u00f5es.<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Limita\u00e7\u00f5es do ElasticSQL: <\/span><a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/sql-limitations.html\"><span style=\"font-weight: 400\">https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/current\/sql-limitations.html<\/span><\/a>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">N\u00e3o h\u00e1 suporte para jun\u00e7\u00f5es de opera\u00e7\u00f5es de conjunto, etc., etc.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Nenhuma fun\u00e7\u00e3o de janela.<\/span><\/li>\n<\/ol>\n<\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">A integra\u00e7\u00e3o de pesquisa do MQL do MongoDB vem com uma longa lista de limita\u00e7\u00f5es.<\/span>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Dispon\u00edvel somente no servi\u00e7o de pesquisa do Atlas, n\u00e3o no produto local.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">A pesquisa s\u00f3 pode ser a PRIMEIRA opera\u00e7\u00e3o dentro do pipeline aggregate().<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Dispon\u00edvel somente no pipeline de agrega\u00e7\u00e3o (aggregate()), o que significa que n\u00e3o pode ser usado com atualiza\u00e7\u00f5es ou exclus\u00f5es como predicado.<\/span><\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">O Couchbase, por outro lado, tem o N1QL e o Full Text Search h\u00e1 muitos anos. A linguagem de consulta oferece suporte a todas as opera\u00e7\u00f5es que voc\u00ea esperaria ver em um banco de dados maduro, com suporte a jun\u00e7\u00f5es semelhantes a RDBMS, agrega\u00e7\u00f5es e otimiza\u00e7\u00e3o de consultas baseadas em regras e em custos.  O mais importante s\u00e3o as constru\u00e7\u00f5es adicionais, como as opera\u00e7\u00f5es NEST, UNNEST e ARRAY, que permitem que a linguagem N1QL trabalhe nativamente com documentos JSON.<\/span><\/p>\n<p><span style=\"font-weight: 400\">O ponto importante do Couchbase N1QL com rela\u00e7\u00e3o aos recursos de pesquisa \u00e9 que o Couchbase Full Text Search est\u00e1 perfeitamente integrado \u00e0 sua linguagem N1QL.<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Fun\u00e7\u00e3o de pesquisa N1QL do Couchbase 6.5. <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/searchfun.html\">https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/searchfun.html<\/a><\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Couchbase 6.6 Flex Index (o t\u00f3pico deste artigo). <a href=\"https:\/\/docs.couchbase.com\/server\/6.6\/n1ql\/n1ql-language-reference\/flex-indexes.html\">https:\/\/docs.couchbase.com\/server\/6.6\/n1ql\/n1ql-language-reference\/flex-indexes.html<\/a><\/span><\/li>\n<\/ol>\n<h3><span style=\"font-weight: 400\">Flex Index com o poder do N1QL<\/span><\/h3>\n<p>Aqui est\u00e1 um exemplo de consulta N1QL para um requisito de analisar i) quanto tempo a equipe de vendas gastou trabalhando com todos os clientes por <code>setor<\/code>e tamb\u00e9m ii) retorna os tr\u00eas principais <code>conjuntos de habilidades<\/code> dos membros da equipe de vendas que trabalharam com esses clientes.<\/p>\n<p><span style=\"font-weight: 400\">A consulta mostra que o Couchbase Flex Index pode ser usado com a combina\u00e7\u00e3o de qualquer recurso N1QL.\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-9038 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/08\/Screen-Shot-2020-08-03-at-2.13.18-PM.png\" alt=\"Full Text Search Index\" width=\"1099\" height=\"660\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.13.18-PM.png 1099w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.13.18-PM-300x180.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.13.18-PM-1024x615.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.13.18-PM-768x461.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/Screen-Shot-2020-08-03-at-2.13.18-PM-20x12.png 20w\" sizes=\"auto, (max-width: 1099px) 100vw, 1099px\" \/><\/p>\n<p>&nbsp;<\/p>\n<h2><span style=\"font-weight: 400\">Considera\u00e7\u00f5es sobre o \u00edndice Flex<\/span><\/h2>\n<p><span style=\"font-weight: 400\">At\u00e9 agora, a discuss\u00e3o ilustrou com exemplos como o recurso de \u00edndice Flex pode aproveitar um \u00fanico \u00edndice FTS de v\u00e1rios campos para atender a todos os diferentes tipos de combina\u00e7\u00f5es de predicados e consultas com v\u00e1rios arrays, enquanto com o GSI voc\u00ea precisaria ter v\u00e1rios \u00edndices.  Mas qual seria o impacto do tamanho do \u00edndice ao usar um \u00edndice FTS em vez de GSI? A tabela abaixo mostra quais s\u00e3o os tamanhos dos \u00edndices em minha configura\u00e7\u00e3o local do Couchbase.<\/span><\/p>\n<h3>Tamanho do \u00edndice<\/h3>\n<p>A tabela abaixo mostra um exemplo do tamanho do \u00edndice com base no conjunto de dados do modelo de atividade do crm.<\/p>\n<p><span style=\"font-weight: 400\">Tamanho do documento: <\/span> <span style=\"font-weight: 400\">1.5K.\u00a0 \u00a0 \u00a0 <\/span><span style=\"font-weight: 400\">Contagem de documentos: <\/span> <span style=\"font-weight: 400\">500K<\/span><\/p>\n<table>\n<tbody>\n<tr>\n<td><b>Op\u00e7\u00f5es de \u00edndice<\/b><\/td>\n<td><b>Tamanho do \u00edndice GSI<\/b><\/td>\n<td><b>Tamanho do \u00edndice FTS<\/b><\/td>\n<td><b>Diferen\u00e7a de armazenamento<\/b><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">\u00cdndice de 13 campos<\/span><\/td>\n<td><span style=\"font-weight: 400\">205 MB<\/span><\/td>\n<td><span style=\"font-weight: 400\">252 MB<\/span><\/td>\n<td><span style=\"font-weight: 400\">+25%<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400\">13 campos +<\/span><b> todos<\/b><span style=\"font-weight: 400\"> elementos de ambas as matrizes<\/span><\/td>\n<td><span style=\"font-weight: 400\">N\/A<\/span><\/td>\n<td><span style=\"font-weight: 400\">357 MB<\/span><\/td>\n<td><span style=\"font-weight: 400\">&#8211;<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400\">O objetivo da tabela acima n\u00e3o \u00e9 fornecer um tamanho exato dos dois tipos de \u00edndices, mas sim as diferen\u00e7as relativas de tamanho entre eles.\u00a0<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">O \u00edndice FTS \u00e9 cerca de 25% maior em tamanho em compara\u00e7\u00e3o com o \u00edndice GSI. Esse n\u00famero reflete os dados da amostra e a distribui\u00e7\u00e3o dos campos indexados.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">H\u00e1 muita economia quando se trata de elementos de matriz.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">O \u00edndice FTS pode incluir todos os elementos de ambas as matrizes em um \u00fanico \u00edndice.<\/span><\/li>\n<\/ol>\n<h3>Desempenho da consulta<\/h3>\n<p>Tanto a indexa\u00e7\u00e3o do Couchbase quanto o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/full-text-search-indexing-best-practices-by-use-case\/\">Indexa\u00e7\u00e3o de pesquisa de texto completo<\/a> foram projetados para serem dimensionados com dimensionamento multidimensional e alta disponibilidade. Dito isso, esses servi\u00e7os foram projetados para atender a objetivos diferentes. O servi\u00e7o de indexa\u00e7\u00e3o funciona melhor para requisitos de alta lat\u00eancia e alta taxa de transfer\u00eancia. Espera-se que as condi\u00e7\u00f5es de pesquisa para essas consultas sejam bem definidas com pequenos conjuntos de resultados. O servi\u00e7o FTS, por outro lado, foi projetado com suporte de analisador avan\u00e7ado para adicionar um elemento de imprecis\u00e3o, com reconhecimento de idioma, al\u00e9m de fornecer uma pontua\u00e7\u00e3o de relev\u00e2ncia para cada resultado.<\/p>\n<ol>\n<li>As consultas baseadas no Flex Index sempre incluir\u00e3o um <code>buscar<\/code> no processamento da consulta. Isso ocorre porque o servi\u00e7o de consulta ainda estar\u00e1 executando a <code>filtro<\/code> fase.<\/li>\n<li>A otimiza\u00e7\u00e3o do desempenho da consulta, como a agrega\u00e7\u00e3o push-down para o \u00edndice, est\u00e1 dispon\u00edvel somente com o GSI, e n\u00e3o com o Flex Index.<\/li>\n<li>As consultas de \u00edndice cobertas est\u00e3o dispon\u00edveis somente com o GSI.<\/li>\n<li>Com o Flex Index, a pagina\u00e7\u00e3o da consulta \u00e9 realizada no n\u00edvel da consulta, pois a pagina\u00e7\u00e3o n\u00e3o pode ser transferida para o FTS.<\/li>\n<li>Para consultas JOIN, somente os campos que podem ser usados em uma consulta de pesquisa do FTS ser\u00e3o passados para o Flex Index.<\/li>\n<\/ol>\n<h2><span style=\"font-weight: 400\">Resumo<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Embora muitos bancos de dados NoSQL estejam tentando aprimorar suas linguagens de consulta, seja imitando o SQL indiretamente com o MQL, seja diretamente com o SQL no ElasticSQL, para oferecer a capacidade de realizar a pesquisa de correspond\u00eancia exata, bem como a pesquisa de texto. Somente o Couchbase N1QL Flex Index oferece esses dois tipos de pesquisa de forma integrada com o N1QL SEARCH() e agora com predicados padr\u00e3o dispon\u00edveis no N1QL Flex Index. Seu conhecimento de SQL \u00e9 tudo o que voc\u00ea precisa para desenvolver um aplicativo que aproveite os dois tipos de pesquisa. Al\u00e9m disso, a pesquisa de texto tamb\u00e9m pode ser combinada com todos os recursos N1QL, JOIN\/Aggregation\/CTE e fun\u00e7\u00f5es avan\u00e7adas de janela anal\u00edtica, e NEST\/UNNEST\/ARRAY para seus documentos JSON.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Refer\u00eancias<\/span><\/h2>\n<ol>\n<li><span style=\"font-weight: 400\">O conjunto de dados de amostra do Activity Management Data Model usado neste artigo. <a href=\"https:\/\/couchbase-sample-datasets.s3.us-east-2.amazonaws.com\/crm.tar\">https:\/\/couchbase-sample-datasets.s3.us-east-2.amazonaws.com\/crm.tar<\/a><\/span><\/li>\n<\/ol>\n<p><strong>Explore os recursos do Couchbase Server 6.6<\/strong><\/p>\n<p>&nbsp;<\/p>\n<table width=\"624\">\n<tbody>\n<tr>\n<td><strong>Blogs<\/strong><\/td>\n<td><strong>Documentos e tutoriais<\/strong><\/td>\n<td><strong>P\u00e1ginas da web e webinars<\/strong><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/whats-new-and-improved-in-couchbase-server-6-6\/\">O que h\u00e1 de novo no Couchbase Server 6.6<\/a><\/td>\n<td><a href=\"https:\/\/docs.couchbase.com\/server\/current\/introduction\/whats-new.html\">O que h\u00e1 de novo no Couchbase Server 6.6?<\/a><\/td>\n<td><a href=\"https:\/\/event.on24.com\/eventRegistration\/EventLobbyServlet?target=reg20.jsp&amp;partnerref=website&amp;eventid=2566405&amp;sessionid=1&amp;key=9DB74CF2A4251458E10D64B86B68C0EF&amp;regTag=&amp;sourcepage=register\">Novos recursos no Couchbase Server 6.6: an\u00e1lise, backup, consulta e muito mais<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/eventing-improvements-timers-handlers-and-statistics\/\">Aprimoramentos de eventos (temporizadores, manipuladores e estat\u00edsticas)<\/a><\/td>\n<td><a href=\"https:\/\/docs.couchbase.com\/server\/6.6\/release-notes\/relnotes.html\">Notas de vers\u00e3o do Couchbase Server 6.6<\/a><\/td>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/analytics\/\">Servi\u00e7o de an\u00e1lise do Couchbase<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/remote-links-analyze-your-enterprise-with-couchbase-analytics\/\">Links remotos - Analise sua empresa com o Couchbase Analytics<\/a><\/td>\n<td><a href=\"https:\/\/index-advisor.couchbase.com\/indexadvisor\/#1\">Experimente o servi\u00e7o de consultoria de \u00edndice do Couchbase<\/a><\/td>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/server\/whats-new\/\">O que h\u00e1 de novo no Couchbase Server (p\u00e1gina do produto)<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/external-datasets-extend-your-reach-with-couchbase-analytics\/\">Conjuntos de dados externos - Amplie seu alcance com o Couchbase Analytics<\/a><\/td>\n<td><a href=\"https:\/\/docs.couchbase.com\/server\/current\/analytics\/rest-links.html\">Configurar links remotos e S3 do Analytics usando a API REST<\/a><\/td>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/editions\/\">Comparar edi\u00e7\u00f5es<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/announcing-flex-index-with-couchbase\/\">Anunciando o Flex Index com o Couchbase<\/a><\/td>\n<td><a href=\"https:\/\/docs.couchbase.com\/server\/current\/analytics\/5_ddl.html\">Criar conjuntos de dados externos usando a linguagem de defini\u00e7\u00e3o de dados (DDL)<\/a><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/introducing-backing-up-to-object-store-s3\/\">Apresentando o backup no Object Store (S3)<\/a><\/td>\n<td><a href=\"https:\/\/docs.couchbase.com\/server\/current\/cli\/cbcli\/couchbase-cli-analytics-link-setup.html\">Configurar links remotos e S3 do Analytics usando a CLI<\/a><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/import-documents-with-admin-ui\/\">Importar documentos com o Web Admin Console<\/a><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Flex Index Explained What is a Flex Index? One of the key tasks of a database engine is how to efficiently manage the search and retrieval of the data therein. The efficiency and balance between resource consumption and performance are [&hellip;]<\/p>","protected":false},"author":26326,"featured_media":9153,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,2165,1812],"tags":[1725],"ppma_author":[8919],"class_list":["post-9025","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-full-text-search","category-n1ql-query","tag-nosql-database"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Announcing Flex Index With Couchbase - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"The Flex Index is a unique Couchbase innovation that uses the inverted indexes from Full-Text Search in complex Couchbase N1QL queries.\" \/>\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\/announcing-flex-index-with-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Announcing Flex Index With Couchbase\" \/>\n<meta property=\"og:description\" content=\"The Flex Index is a unique Couchbase innovation that uses the inverted indexes from Full-Text Search in complex Couchbase N1QL queries.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/announcing-flex-index-with-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-08-12T16:00:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:27:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/indexing.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"553\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Binh Le\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Binh Le\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/\"},\"author\":{\"name\":\"Binh Le\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63\"},\"headline\":\"Announcing Flex Index With Couchbase\",\"datePublished\":\"2020-08-12T16:00:13+00:00\",\"dateModified\":\"2025-06-14T03:27:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/\"},\"wordCount\":3186,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/indexing.jpg\",\"keywords\":[\"NoSQL Database\"],\"articleSection\":[\"Application Design\",\"Full-Text Search\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/\",\"name\":\"Announcing Flex Index With Couchbase - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/indexing.jpg\",\"datePublished\":\"2020-08-12T16:00:13+00:00\",\"dateModified\":\"2025-06-14T03:27:37+00:00\",\"description\":\"The Flex Index is a unique Couchbase innovation that uses the inverted indexes from Full-Text Search in complex Couchbase N1QL queries.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/indexing.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/indexing.jpg\",\"width\":1400,\"height\":553,\"caption\":\"Flex Index is Amazing\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Announcing Flex Index With Couchbase\"}]},{\"@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\/f89064928e262c71eb43bee996c48c63\",\"name\":\"Binh Le\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5b68c37e30928a9d7b2c8470b1a303b7\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g\",\"caption\":\"Binh Le\"},\"description\":\"Binh Le is a Principal Product Manager for Couchbase Query service. Prior to Couchbase, he worked at Oracle and led the product management team for Sales Cloud Analytics and CRM OnDemand. Binh holds a Bachelor's Degree in Computer Science from the University of Brighton, UK.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/binh-le-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Announcing Flex Index With Couchbase - The Couchbase Blog","description":"The Flex Index is a unique Couchbase innovation that uses the inverted indexes from Full-Text Search in complex Couchbase N1QL queries.","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\/announcing-flex-index-with-couchbase\/","og_locale":"pt_BR","og_type":"article","og_title":"Announcing Flex Index With Couchbase","og_description":"The Flex Index is a unique Couchbase innovation that uses the inverted indexes from Full-Text Search in complex Couchbase N1QL queries.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/announcing-flex-index-with-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-08-12T16:00:13+00:00","article_modified_time":"2025-06-14T03:27:37+00:00","og_image":[{"width":1400,"height":553,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/indexing.jpg","type":"image\/jpeg"}],"author":"Binh Le","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Binh Le","Est. reading time":"16 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/"},"author":{"name":"Binh Le","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f89064928e262c71eb43bee996c48c63"},"headline":"Announcing Flex Index With Couchbase","datePublished":"2020-08-12T16:00:13+00:00","dateModified":"2025-06-14T03:27:37+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/"},"wordCount":3186,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/indexing.jpg","keywords":["NoSQL Database"],"articleSection":["Application Design","Full-Text Search","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/","name":"Announcing Flex Index With Couchbase - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/indexing.jpg","datePublished":"2020-08-12T16:00:13+00:00","dateModified":"2025-06-14T03:27:37+00:00","description":"The Flex Index is a unique Couchbase innovation that uses the inverted indexes from Full-Text Search in complex Couchbase N1QL queries.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/indexing.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/08\/indexing.jpg","width":1400,"height":553,"caption":"Flex Index is Amazing"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/announcing-flex-index-with-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Announcing Flex Index With Couchbase"}]},{"@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\/f89064928e262c71eb43bee996c48c63","name":"Binh Le","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/5b68c37e30928a9d7b2c8470b1a303b7","url":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","caption":"Binh Le"},"description":"Binh Le \u00e9 gerente de produto principal do servi\u00e7o Couchbase Query. Antes da Couchbase, ele trabalhou na Oracle e liderou a equipe de gerenciamento de produtos para Sales Cloud Analytics e CRM OnDemand. Binh \u00e9 bacharel em Ci\u00eancia da Computa\u00e7\u00e3o pela Universidade de Brighton, no Reino Unido.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/binh-le-2\/"}]}},"authors":[{"term_id":8919,"user_id":26326,"is_guest":0,"slug":"binh-le-2","display_name":"Binh Le","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/a939f48df6447844a8780bec264bb3be21d589336f3915fabc557075a68fa374?s=96&d=mm&r=g","author_category":"","last_name":"Le","first_name":"Binh","job_title":"","user_url":"","description":"Binh Le \u00e9 gerente de produto principal do servi\u00e7o de consulta do Couchbase. Antes da Couchbase, ele trabalhou na Oracle e liderou a equipe de gerenciamento de produtos para Sales Clould Analytics e CRM OnDemand. Binh \u00e9 bacharel em Ci\u00eancia da Computa\u00e7\u00e3o pela Universidade de Brighton, no Reino Unido."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/9025","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\/26326"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=9025"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/9025\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/9153"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=9025"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=9025"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=9025"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=9025"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}