Pesquisa de texto completo

SQL de primeira classe para pesquisa de texto completo

Com o tempo, o setor de bancos de dados percebeu que a pesquisa de texto completo e o SQL são dois lados da mesma moeda. A pesquisa de texto precisa de mais processamento de consulta e o processamento de consulta precisa de pesquisa de texto para filtrar com eficiência os padrões de texto. Os bancos de dados SQL adicionaram a pesquisa de texto completo a eles, embora para sistemas SMP de nó único.

O Couchbase Full-Text Search (FTS) foi criado com três motivações principais:

O FTS consegue isso com um índice invertido e um rico conjunto de predicados de consultaO sistema oferece suporte à pesquisa de palavras simples, à correspondência de padrões e a predicados de intervalo complexos. Além da pesquisa, ele oferece suporte à agregação por meio de facetas de pesquisa.

No mundo NoSQL, o Lucene é um índice de pesquisa popular, assim como os servidores de pesquisa baseados no Lucene: Solr e Elasticsearch. Seguindo seus primos RDBMS, Elasticsearch, Opendistro para Elasticsearch todos adicionaram SQL em suas pesquisas. O Couchbase introduziu o serviço de texto completo, FTS e deu continuidade ao suporte para pesquisa no N1QL.

As implementações SQL de Elasticsearch com SQL e MQL do MongoDB vem com uma longa lista de limitações.

Elasticsearch com SQL listou suas limitações aqui:

MQLs do MongoDB A integração de pesquisa vem com uma longa lista de limitações.

    • Disponível apenas no serviço de pesquisa do Atlas, não no produto local.
    • A pesquisa só pode ser a PRIMEIRA operação dentro do pipeline aggregate().
    • Disponível somente no pipeline de agregação (aggregate()) e não em outras operações como find(), insert(), update(), remove().

A integração com sua API aggregate() vem com algumas limitações: Ela só pode ser a primeira operação no pipeline indisponível em seu banco de dados local. Os recursos que discutimos neste artigo estão no Couchbase 6.5 e superior.

Aqui está um exemplo do N1QL:

Isso inclui o seguinte, além de SEARCH():

  • Projeção de campos dos documentos: país, cidade, nome
  • Geração de número de linha por meio da função de janela ROW_NUMBER()
  • Predicado escalar adicional t1.type = "hotel"
  • Predicado de matriz sobre revisões (ANY)

Você obtém o benefício COMPLETO do processamento de consultas de primeira classe, além da pesquisa eficiente. E isso não é tudo - o N1QL oferece ainda mais. Os benefícios e eficácia do SQL são bem conhecidos. N1QL é SQL para JSON. O objetivo do N1QL é oferecer aos desenvolvedores e às empresas uma linguagem expressiva, poderosa e completa para consulta, transformação e manipulação de dados JSON.

Os benefícios de usar N1QL com a pesquisa são os seguintes:

  1. Predicados:
    • O FTS é excelente para pesquisas com base na relevância. O SQL é excelente com processamento adicional de consultas complexas: predicados complexos, predicados de matriz, escalar adicional 
  2. Operadores e funções:
    1. Processamento de predicados (processamento de filtros)
      1. Predicados adicionais de escalar e matriz
      2. Funções escalares e de matriz também podem ser usadas nos predicados
      3. Subconsultas
        1. Subconsultas correlacionadas
        2. Subconsultas não correlacionadas 
    2. Agregados
    3. Funções da janela
  3. Processamento de JOIN
    1. O N1QL pode fazer INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN (limitado), NEST, UNNEST
    2. JOINS entre compartimentos, coleções e resultados de subconsultas.
  4. Operações SET
    1. UNIÃO
    2. UNION ALL
    3. EXCETO
    4. EXCETO TODOS
    5. INTERSECÇÃO
    6. INTERSECTAR TUDO
  5. CTE (Expressão de tabela comum) e Cláusula LET para melhorar a redação de consultas
  6. Mais do que SEARCH()
    1. Além do SELECT, você pode usar o predicado SEARCH() nas cláusulas WHERE dos comandos INSERT, UPDATE, DELETE e MERGE.
    2. Você pode PREPARAR essas declarações e EXECUTÁ-LAS repetida e eficientemente.
    3. Você obtém a segurança usual por meio das funções RBAC via GRANT & REVOKE.
  7. Produtividade do desenvolvedor: Escreva a consulta em SQL, a linguagem que eles já conhecem.

Vamos dar uma olhada em como o mecanismo N1QL executa isso. Abhinav Dangeti, da engenharia de FTS do Couchbase, já escreveu um ótimo blog que detalha a tomada de decisões e os exemplos. Este artigo pretende explicar isso visualmente com exemplos adicionais nas categorias mencionadas acima.

1. ARQUITETURA para EXECUÇÃO DE CONSULTAS

Adicionamos três etapas importantes à execução da consulta: a consulta usa SEARCH():

  1. O planejador considera o índice de pesquisa do FTS um dos caminhos de acesso válidos se o predicado search() existir na consulta.
    • Se o índice de pesquisa for selecionado, ele criará o plano empurrando o predicado de pesquisa para o índice FTS.
  2. Quando o índice de pesquisa é selecionado, o executor emite a solicitação de pesquisa para um dos nós FTS (em vez da solicitação de varredura para o serviço de índice)
  3. Antes que os resultados da pesquisa sejam finalizados, o serviço de consulta verifica novamente a qualificação da pesquisa do documento para os dados.
N1QL query execution with FTS

Execução de consultas N1QL com FTS

Inside the Query Service

Dentro de um serviço de consulta

2. PROCESSAMENTO DE PREDICADOS

Na consulta a seguir, o predicado SEARCH() (predicado-2) é enviado para a solicitação de pesquisa do FTS. Todos os outros predicados são processados pelo mecanismo de consulta após a pesquisa na fase "Filtro", conforme mostrado na figura "Dentro de um serviço de consulta" acima. Esta é uma exceção a isso. Quando o índice FTS tiver criado um índice com Campo de tipo JSON (doc_config.type_field no documento de definição do índice) é definido (neste caso, tipo = "hotel") para criar o índice no subconjunto do documento, tanto a seleção do índice quanto o pushdown da pesquisa exploram esse predicado. Mesmo nesse caso, o predicado é reaplicado após a busca do documento.

3. OPERADORES e FUNÇÕES

Aqui está um exemplo de uma consulta que explora os operadores e as funções.

Aqui está o plano de consulta para essa consulta. O IndexSearch faz a solicitação de pesquisa do FTS e isso é colocado em camadas no pipeline de execução da consulta. Assim, a consulta obtém o benefício de todos os outros recursos do N1QL. Isso reflete os estágios do pipeline na figura acima.

Query plan with SEARCH()

Plano de consulta com SEARCH()

4. Processamento de JOIN

O SEARCH() também pode ser usado como parte do processamento de união. Nesse caso, o FTS é usado para localizar todas as cidades que têm hotéis com jardins e, em seguida, unir-se aos aeroportos.

 

 

JOIN with SEARCH

JOIN com SEARCH

5. Expressões de tabela comuns (CTEs).

O N1QL no serviço de consulta suporta CTEs não recursivos. Você pode usar SEARCH() em cada expressão. A tabela derivada dessa expressão (hotel e aeroporto) é usada como espaço-chave na consulta.

5. Uso em UPDATEs

SEARCH() pode ser usado em qualquer lugar onde um predicado é permitido em outras instruções DML.

Os exemplos podem fluir por muito tempo. Mostrei exemplos comuns. Você usa isso em várias instruções SQL (DMLs)
Conclusão:

O Couchbase FTS fornece um mecanismo de pesquisa de texto distribuído e dimensionável. Nós o incorporamos perfeitamente ao N1QL no serviço Couchbase Query para que você tenha todo o poder das consultas com todo o poder da pesquisa. Há mais inovações sobre isso em andamento. Fique ligado!

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Keshav Murthy

Keshav Murthy é vice-presidente de P&D da Couchbase. Anteriormente, ele trabalhou na MapR, IBM, Informix e Sybase, com mais de 20 anos de experiência em design e desenvolvimento de bancos de dados. Ele liderou a equipe de P&D de SQL e NoSQL na IBM Informix. Recebeu dois prêmios President's Club na Couchbase e dois Outstanding Technical Achievement Awards na IBM. Keshav é bacharel em Ciência da Computação e Engenharia pela Universidade de Mysore, Índia, detém dez patentes nos EUA e tem três patentes pendentes nos EUA.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.