Com o Couchbase v6.5, o Full-Text Search agora está integrado à construção de consulta N1QL do Couchbase. Os clientes agora podem aproveitar os índices FTS diretamente com o N1QL. Isso oferece aos desenvolvedores uma API única para combinar a correspondência exata de predicados do N1QL e a pesquisa avançada do FTS.

O único desafio constante para muitos desenvolvedores de aplicativos com bancos de dados relacionais é o desempenho das consultas. A solução de problemas de desempenho de consultas geralmente se limita ao que os bancos de dados relacionais oferecem: obter um servidor de banco de dados maior ou índices melhores.

Com o Couchbase, o desempenho da consulta N1QL também depende de componentes semelhantes. Mas, ao contrário do RDBMS relacional, a arquitetura de isolamento de serviços do Couchbase significa que os serviços de consulta e índice podem ser dimensionados de forma independente. Com o dimensionamento adequado e o planejamento da capacidade, o Couchbase pode oferecer um desempenho extremamente rápido, conforme mostrado em um exemplo Benchmark Altoros NoSQL relatório.

Além dos predicados de consulta - N1QL e pesquisa

Os clientes podem atingir um tempo de resposta de milissegundos para consultas com índices apropriados. No entanto, há momentos em que os predicados de consulta usados pelos índices do Couchbase GSI não são conhecidos com antecedência. A solução ideal é ter um sistema de indexação que possa funcionar com qualquer combinação dos predicados de consulta disponíveis.

A indexação adaptativa do Couchbase pode abordar muitos desses casos de uso. O Couchbase Full-Text Search é outra abordagem para casos de uso de padrões irregulares. Ele oferece recursos de pesquisa de texto e fuzzy em qualquer campo do documento.

Vamos considerar o documento de gerenciamento de atividades abaixo. Uma atividade:

  1. Sempre pertencem a um cliente (conta)
  2. Também podem ter vários contatos da organização do cliente e são representados por uma matriz de contatos
  3. Pode incluir vários participantes, representados por uma série de usuários.
  4. Pode ser do tipo compromisso ou tarefa, sendo que ambos têm seus atributos específicos correspondentes, como título, data de início, data de vencimento etc.
  5. Uma atividade do tipo Tarefa tem uma matriz de lista de tarefas

sample json document for examples sample documents for examples

O caso de uso

John, um representante de serviços de um call center da Acme Ltd, precisa recuperar todas as atividades do cliente enquanto estiver ao telefone com um cliente. O cliente pode fornecer um ou vários dos valores abaixo para que John consulte o aplicativo:

  1. Título da atividade: A consulta deve retornar todas as atividades que tenham esse texto, em qualquer lugar do título da atividade.
  2. Nome do cliente: o nome do cliente inserido pode estar incompleto, portanto, a consulta precisa usar um curinga para fazer a correspondência com o nome do cliente.
  3. Nome do contato, e-mail ou telefone de contato: O cliente também pode fornecer detalhes da pessoa de contato. Esses dados também podem estar incompletos.
  4. Um nome de participante: o cliente também pode fornecer o nome do gerente de conta, um funcionário da Acme com quem o cliente tenha interagido e que tenha participado da atividade.
  5. Data da atividade: o cliente pode fornecer um intervalo de datas e horários para as atividades.
  6. O representante de serviço pode receber uma ou mais das informações acima. O padrão não é fixo.
  7. O tempo de resposta da consulta precisa ser de aproximadamente 1 segundo
  8. O volume de dados é de 3 milhões por ano e o período de retenção é de 3 anos.

Quais são os desafios para recuperar essas informações?

  1. Pode haver até oito campos que o cliente pode fornecer e nenhum deles é obrigatório. Isso representaria um desafio para um projeto eficiente de índice GSI porque a chave principal do índice precisa estar presente para a seleção do índice. Como resultado, os índices GSI não podem abranger todos os casos.
  2. Correspondência curinga: o título da atividade, o nome do cliente e do contato, o e-mail ou o telefone fornecidos podem estar incompletos, portanto, uma técnica de correspondência de predicado N1QL exata não funcionará.
  3. Tanto os contatos quanto os participantes são objetos filhos das atividades. No modelo de dados JSON, os contatos e os participantes são representados como duas matrizes separadas. Se precisarmos de um índice de cobertura, ele deverá incluir um ou mais elementos de ambos os arrays.

As soluções

1. A abordagem mais simples é usar os predicados N1QL:

Os seguintes índices GSI também seriam necessários:

Observe que a consulta acima pode usar um ou todos os índices disponíveis para melhorar o desempenho da consulta. No entanto, ainda pode haver problemas de desempenho devido à necessidade de o plano de consulta usar a operação IntersectScan.

2. Alavancagem do índice FTS

O Couchbase Full-Text Search poderia ajudar nesse caso de uso, devido ao seu recurso de pesquisa não exata e à capacidade de pesquisar os campos em qualquer ordem. Aqui está um índice FTS que pode cobrir os critérios de pesquisa.

couchbase dialog for setting up a full text search index

2.1 Usando CURL - Isso é compatível com o Couchbase 5.5

2.2 Com a integração N1QL/FTS usando SEARCH_QUERY

2.3 Com a integração N1QL/FTS usando o predicado N1QL SEARCH

Observações:

  1. O exemplo acima aproveita a consulta composta do FTS com a construção conjunta para combinar todos os predicados em um único SEARCH(). Consulte a documentação do Couchbase FTS para obter mais detalhes sobre Tipo de consulta FTS
  2. A declaração acima deve ser construída programaticamente para incluir apenas os predicados de pesquisa necessários.
  3. O design do índice FTS deve incluir os campos que são usados na função SEARCH()
  4. O predicado N1QL a.type='activity' deve estar presente na consulta para a seleção do índice FTS

O predicado N1QL SEARCH_QUERY e SEARCH faz parte do recurso de integração N1QL/FTS disponível no Couchbase v6.5 e atualizarei o blog com a documentação quando ela estiver disponível.

Para obter mais detalhes sobre a sintaxe de consulta do FTS https://docs.couchbase.com/server/6.0/fts/full-text-intro.html

N1QL e resumo da pesquisa:

  1. A integração N1QL/FTS permite que uma consulta use a construção de pesquisa FTS diretamente como predicados de pesquisa
  2. O uso do índice FTS na consulta N1QL alivia a necessidade de ter um índice exato para cada padrão de consulta
  3. O N1QL/FTS oferece uma opção adicional para os desenvolvedores explorarem ao lidar com problemas de desempenho de consultas
  4. O índice FTS é adequado quando você precisa pesquisar em vários campos em qualquer ordem
  5. O índice FTS é adequado para casos em que você precisa pesquisar campos em várias matrizes

Recursos

Gostaríamos muito de saber o que você achou dos recursos da versão 6.5 e como eles beneficiarão sua empresa no futuro. Compartilhe seu feedback nos comentários ou na seção fórum.

Autor

Postado por Binh Le

Binh Le é gerente de produto principal do serviço 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 é bacharel em Ciência da Computação pela Universidade de Brighton, no Reino Unido.

Deixar uma resposta