O Couchbase Mobile 2.0 apresenta recursos avançados de pesquisa de texto completo (FTS) em seus documentos JSON. Isso faz parte da nova interface de consulta baseada em N1QLa linguagem de consulta declarativa do Couchbase que estende o SQL para JSON. Se você estiver familiarizado com SQL, vai se sentir em casa com a semântica da nova API.

O Full Text Search permite a consulta em linguagem natural. Este é o terceiro de uma série de posts que discute a interface de consulta no Couchbase Lite. Este blog pressupõe que você esteja familiarizado com os fundamentos, portanto, se ainda não o fez, não deixe de revisar o artigo postagem anterior primeiro. Se estiver interessado, os links para blogs que discutem outros recursos da interface do Query são fornecidos no final desta publicação.

Você pode fazer o download da versão de pré-lançamento mais recente do Couchbase Mobile 2.0 em aqui.

Histórico

Se você estava usando as versões 1.x do Couchbase Mobile, provavelmente está familiarizado com Visualizações de mapas para criar índices e consultas. Na versão 2.0, você não precisa mais criar visualizações e funções de mapa! Em vez disso, uma interface simples permite a criação de índices e você pode usar uma interface do Query Builder para construir suas consultas. A nova interface de consulta é mais simples de usar e muito mais poderosa em comparação. Vamos descobrir alguns de seus recursos nesta postagem.

Projeto de amostra

Embora os exemplos discutidos aqui usem o Swift para iOS, observe que, salvo algumas pequenas diferenças, a mesma interface de consulta também é compatível com as plataformas Android e Windows.

Portanto, com alguns pequenos ajustes, você poderá reutilizar os exemplos de consulta desta postagem ao trabalhar com outras plataformas.

Siga as instruções abaixo se você estiver interessado em um projeto Swift de amostra

  • Clone o iOS Swift Playground do GitHub
  • Siga as instruções de instalação no manual correspondente LEIAME para criar e executar o playground.

Modelo de dados de amostra

Usaremos o banco de dados Travel Sample localizado aqui. Você pode incorporar esse banco de dados pré-criado em seu aplicativo móvel e começar a usá-lo para suas consultas.

O conjunto de dados de amostra inclui vários tipos de documentos, conforme identificado pelo tipo no documento. Vamos nos concentrar em documentos de tipo "marco" . O modelo de documento JSON é mostrado abaixo. Para fins de brevidade, omitimos do modelo abaixo algumas das propriedades que não são relevantes para esta postagem.

** Consulte o modelo acima para cada um dos exemplos de consulta abaixo. **

O identificador do banco de dados

Nas consultas abaixo, usaremos o Banco de dados API para abrir/criar o banco de dados CouchbaseLite.

O básico

O Full Text Search permite consultas em linguagem natural. Em nossa postagem sobre o Fundamentos da consultadiscutimos o como e regex para operações de correspondência de padrões. O FTS supera esse recurso ao permitir o suporte a derivação, classificação baseada em relevância e consulta em linguagem natural específica do local.

As pesquisas de texto completo são não diferencia maiúsculas de minúsculas e usar o partida expressão de consulta. Para executar o FTS, você deve criar Índice do texto completo nas propriedades apropriadas. Você pode criar um índice em uma ou mais propriedades.

Derivação

Antes de prosseguirmos com os exemplos, primeiro uma palavra sobre Stemming. Stemming é o processo de reduzir as palavras à sua palavra raiz. Assim, para instânciaOs termos "catty", "catlike" e "cats" são reduzidos à palavra "cat". Portanto, a busca pelo termo "cats" nos daria resultados que correspondem a "cat", "catlike" e assim por diante.

Atualmente, o Couchbase Lite oferece suporte a Stemming nos seguintes idiomas
* Dinamarquês
* Holandês
* Inglês
* finlandês
* Francês
* Alemão
* húngaro
* Italiano
* norueguês
* português
* romeno
* Russo
* espanhol
* sueco
* Turco

Se nenhum idioma específico for usado, o tokenizador ainda dividirá o texto em palavras com caracteres de espaço em branco Unicode. Portanto, ele deve funcionar, embora menos bem, com qualquer idioma que coloque espaços entre as palavras.

Índice do texto completo

O nome que está associado ao índice durante a criação é importante. Os exemplos de consulta que veremos mais tarde farão referência ao índice apropriado por meio do nome

Índice de propriedade única

O exemplo a seguir cria um fullTextIndex no "content" (conteúdo) propriedade de um Documento. Por padrão, a derivação é ativada e a localidade é considerada a localidade do dispositivo. Embora não seja mostrado abaixo, você também tem a opção de especificar se os "acentos" devem ser ignorados ou não por meio da opção ignoreAccents opção. Por padrão, os acentos não são ignorados.

Índice de propriedades múltiplas

O exemplo a seguir cria um fullTextIndex em "content" (conteúdo) e "name" (nome) propriedades de um Documento

Índice sem stemização

O exemplo a seguir cria um fullTextIndex no "content" (conteúdo) propriedade de um Documento com o stemming desativado. O stemming é ativado por padrão usando as configurações atuais de idioma do dispositivo. Definir o idioma como nulo desabilitará o stemming.

Pesquisa FTS com Stemming

A consulta abaixo busca o id e conteúdo propriedades de "marco" tipo documentos que contêm o termo "Mecânica" no "content" (conteúdo) propriedade. Usamos o "ContentFTSIndex" que foi criado anteriormente.

Solicitação

Resposta de amostra

A resposta à consulta acima incluirá documentos que contêm os termos "mechanical", "mechanism", "mechanisms", "mechanic" e assim por diante.

Pesquisa FTS sem Derivação

A consulta abaixo busca o id e conteúdo propriedades de "marco" tipo documentos que contêm o termo exato "Mecânica" no "content" (conteúdo) propriedade. Usamos o "ContentFTSIndexNoStemming" que foi criado anteriormente e que especificava a opção de desativar o stemming.

Solicitação

Resposta de amostra

A resposta à consulta acima incluirá documentos que contêm exatamente o termo "mechanical". Observe novamente que todas as pesquisas não diferenciam maiúsculas de minúsculas.

Pesquisa FTS em várias propriedades

A consulta abaixo busca o id , nome e conteúdo propriedades de "marco" tipo documentos que contêm o termo "Mecânica" no "name" (nome) ou o "content" (conteúdo) propriedade. Usamos o "ContentAndNameFTSIndex" que foi criado anteriormente. Esse índice habilitou a indexação no "name" (nome) e "content" (conteúdo) propriedades

Solicitação

Resposta de amostra

A resposta à consulta acima incluirá documentos que contêm o termo "mechanical" (ou variantes dele derivadas por meio de stemming) na propriedade "name" ou "content".

Pesquisa FTS com expressões lógicas

Em um exemplo anterior, você viu que, ao desativar o stemming, é possível procurar a string de pesquisa exata. Mas e se você quisesse procurar mais de um termo de pesquisa? O partida A expressão de consulta aceita expressões lógicas, incluindo AND e OR.

A consulta abaixo busca o id e conteúdo propriedades de "marco" tipo documentos que contêm o termo "Mecânica" ou "Mecanismo" no "content" (conteúdo) propriedade. Usamos o "ContentFTSIndexNoStemming" que foi criado anteriormente para desativar o stemming.

Solicitação

Resposta de amostra

A resposta à consulta acima incluirá documentos que contenham exatamente os termos "mechanical" ou "mechanism" na propriedade "content".

Pesquisa FTS com expressão Wilcard

Você pode usar o caractere "*" na cadeia de pesquisa para representar zero ou mais correspondências de caracteres.

A consulta abaixo busca o id e conteúdo propriedades de "marco" tipo documentos que contêm o termo "walt*" no "content" (conteúdo) propriedade. Isso corresponderá a todos os termos de pesquisa que começam com "walt" seguido de zero ou mais caracteres. Usamos a propriedade "ContentFTSIndex" que foi criado anteriormente.

OBSERVAÇÃO: Pode-se argumentar que o uso de curingas no termo de pesquisa pode ser uma maneira ingênua de implementar o stemming. Mas, nesse caso, você pode acabar com formas derivadas que podem não corresponder aos termos derivados por stemming. Portanto, é preferível usar o stemming se for isso que você precisa.

Solicitação

Resposta de amostra

A resposta à consulta acima incluirá documentos que contêm os termos "walt", "Walter", "Waltham", "Walthamstow" e assim por diante.

Pesquisa FTS com palavras de parada

As stop words referem-se a palavras comuns em um idioma. Em inglês, seriam termos como "the", "is", "and", "which" e assim por diante.

Exemplo 1: A cadeia de pesquisa contém palavras de parada

O Couchbase Lite ignora as palavras de parada que aparecem na string de pesquisa.

A consulta abaixo busca o id e conteúdo propriedades de "marco" tipo documentos que contêm o termo "sobre a história" no "content" (conteúdo) propriedade. Usamos o "ContentFTSIndex" que foi criado anteriormente.

O Couchbase Lite ignora as palavras de parada "on" e "the", portanto, você buscaria documentos que incluíssem apenas o termo "history" e as formas derivadas da palavra de origem

Solicitação

Resposta de amostra

A resposta à consulta acima incluirá documentos que contêm os termos "history" e formas derivadas dessa palavra, como "historical"

Exemplo 2: Ignorando palavras de parada durante a pesquisa

Por padrão, o Couchbase Lite ignora palavras de parada no conteúdo da pesquisa.

A consulta abaixo busca o id e conteúdo propriedades de "marco" tipo documentos que contêm os termos "barbatana azul barbatana amarela" no "content" (conteúdo) propriedade. Usamos o "ContentFTSIndex" que foi criado anteriormente.

O Couchbase Lite ignora palavras de parada durante a pesquisa, portanto, você buscaria documentos que incluíssem os termos "blue", "fin" e "yellow" nessa ordem, separados por qualquer número de palavras de parada.

Solicitação

Resposta de amostra

A resposta à consulta acima incluirá documentos que contêm os termos "blue" (azul), "fin" (barbatana) e "yellow" (amarelo) separados por qualquer número de palavras de parada, como "blue fin and yellow fin" (barbatana azul e barbatana amarela)

Pesquisa FTS com classificação

Você pode usar o FullTextFunction.rank para especificar a ordem de classificação dos resultados da pesquisa. Isso é útil para classificar as correspondências na ordem da melhor correspondência.

A consulta abaixo busca o id e conteúdo propriedades de "marco" tipo documentos que contêm o termo "atrair" no "content" (conteúdo) propriedade. Os documentos são ordenados em ordem decrescente de acordo com a classificação, o que significa que o documento com o número máximo de correspondências é classificado acima dos demais.

Solicitação

Resposta de amostra

A resposta à consulta acima incluirá documentos que incluem o termo "atrair" ou versões derivadas dele. Os documentos com o número máximo de correspondências são classificados em ordem superior.

Limitações

Embora a capacidade do FTS no Couchbase Lite 2.0 seja extremamente avançada e seja suficiente para casos de uso típicos de um banco de dados incorporado, há algumas limitações

  • A expressão de correspondência só pode estar no nível superior ou na expressão AND de nível superior. Isso significa que a seguinte expressão não é permitida ftsExpression.match("attract").or(ftsExpression2.match("museum"))
  • Tokenizadores de idiomas personalizados
    A lista de idiomas compatíveis foi especificada anteriormente. No momento da redação deste post, não é possível conectar um tokenizador personalizado para ampliar o suporte a outros idiomas
  •  Suporte à pesquisa difusa
    Não podemos especificar um fator de "imprecisão" na consulta, o que pode resultar na consideração de correspondências menos relevantes
  •  Facetas
    Não há suporte para pesquisa facetada

Lembre-se de que o Couchbase Lite é um banco de dados incorporado. Portanto, pode-se argumentar que os recursos do FTS não precisam ser tão extensos quanto uma implementação de banco de dados no lado do servidor. O suporte a esses recursos será avaliado em versões futuras.

O que vem a seguir

Esta postagem do blog analisou como você pode aproveitar os recursos de pesquisa de texto completo (FTS) na nova API de consulta do Couchbase Mobile 2.0. Isso é um começo. Espere ver mais funcionalidades em versões futuras. Você pode fazer o download da versão mais recente em nosso downloads página.

Aqui estão algumas outras postagens relacionadas ao Couchbase Mobile Query que podem ser de interesse
- Isso postagem no blog discute os fundamentos
- Isso postagem no blog discute como consultar coleções de matrizes
- Isso postagem no blog discute como fazer consultas JOIN

Se tiver dúvidas ou comentários, deixe um comentário abaixo ou entre em contato comigo pelo Twitter @rajagp ou envie-me um e-mail priya.rajagopal@couchbase.com. O Fóruns do Couchbase são outro bom lugar para entrar em contato com perguntas.

 

Autor

A ordem da postagem em relação a outras postagens. Priya Rajagopal, Diretora Sênior, Gerenciamento de Produtos

Priya Rajagopal é diretora sênior de gerenciamento de produtos da Couchbase, responsável pelas plataformas de desenvolvedor para a nuvem e a borda. Ela desenvolve software profissionalmente há mais de 20 anos em vários cargos técnicos e de liderança de produtos, com mais de 10 anos de foco em tecnologias móveis. Como delegada de padrões de IPTV da TISPAN, ela foi uma das principais colaboradoras das especificações de padrões de IPTV. Ela tem 22 patentes nas áreas de rede e segurança de plataforma.

Posição vertical a partir do topo para iniciar o corte como uma porcentagem da altura da imagem.