Pesquisa de texto completo (ou FTS) é um novo recurso que está sendo lançado como uma prévia para desenvolvedores no Couchbase 4.5. Ele não se destina à produção e ainda não é compatível, mas é um vislumbre do que está por vir.

Ao oferecer a capacidade de pesquisa, um simples LIKE '%foo%' com N1QL não é suficiente. Seus usuários esperam uma experiência de pesquisa mais rica: uma experiência que reconheça o idioma e classifique os resultados de acordo com sua relevância.

Nesta postagem do blog, vou mostrar a você:

  • Como configurar um índice de pesquisa de texto completo
  • Como executar uma consulta de pesquisa de texto completo no Console do Couchbase
  • Como executar uma consulta de pesquisa de texto completo com destaque no ASP.NET

Configurar um índice de pesquisa de texto completo

Primeiro, você precisa ter certeza de que está usando Couchbase 4.5 (beta, pelo menos)Verifique se você tem acesso ao Console do Couchbase e se o seu cluster está executando um serviço de texto completo. Você pode verificar se há um serviço Full Text em execução clicando em "Server Nodes" (Nós do servidor) no Console do Couchbase. Os serviços (como o Full Text) precisam ser ativados/desativados ao adicionar um nó ao cluster. Se precisar de uma atualização, dê uma olhada no meu postagem do blog sobre como instalar e configurar o Couchbase no Windows.

Server Nodes - Services available

Vou configurar um índice de pesquisa de texto completo no amostra de viagem bucket de dados de amostra. Você pode instalá-lo acessando Settings -> Sample Buckets, selecionando 'travel-sample' e clicando em "Create".

Create a sample bucket

Nesses dados de amostra, há documentos do tipo "landmark". Entre outras coisas, esses documentos contêm campos de "conteúdo". Aqui está um trecho de um dos documentos de referência. (ID 'landmark_16079' se estiver acompanhando):

Com essa estrutura em mente, vamos criar o índice. Vá para Indexes->Full Text (Índices->Texto completo) e clique em "New Full Text Index" (Novo índice de texto completo).

Vou nomear o índice amostra de viagem-idxe colocá-lo no amostra de viagem balde. Há muitas opções aqui, mas vou abordar apenas os mapeamentos de tipos. Expanda "Type Mappings" (Mapeamentos de tipos) e clique em "Add Type Mapping" (Adicionar mapeamento de tipos). Isso permite que você restrinja a pesquisa de texto completo a documentos de um determinado tipo (neste caso, "landmark", que corresponde ao campo "type"). Marque também a caixa "only index specified fields" (indexar somente os campos especificados); caso contrário, todos os campos dos documentos serão indexados para pesquisa. Pressione "ok".

Create full text search for landmark documents

Em seguida, passe o mouse sobre o mapeamento do tipo 'landmark' e clique no ícone + e clique em "inserir campo filho". Se você quiser indexar dados de pesquisa que estejam mais abaixo na hierarquia do documento, precisará "inserir mapeamento filho" (quantos níveis forem necessários) até chegar a eles. No nosso caso, o campo de conteúdo está no nível da raiz, portanto, não preciso fazer isso.

Para o campo filho, digite o nome do campo ("content") no campo, deixe todo o resto como está, marque a caixa de seleção "store" (mais sobre isso adiante) e clique em "ok".

Create child field for full text search

Por fim, edite o mapeamento do tipo "default" e desmarque a opção "enabled". Esse mapeamento permitiria a pesquisa em todos os documentos, mas, neste exemplo, queremos limitar apenas ao marco. Pressione "ok" e "Create Index".

Disable default type mapping on full text search

Depois de clicar em "Create Index", você verá uma visão geral do índice que acabou de criar. Ele começará imediatamente a indexar os documentos. Se você clicar no ícone Atualizar você verá a contagem dos documentos que foram indexados até o momento.

Full Text Search indexing in progress

Ele será 100% quando estiver concluído.

Full Text Search indexing complete

Executar uma consulta de pesquisa de texto completo no Console do Couchbase

Antes de entrarmos no C#/.NET, você pode experimentar a pesquisa de texto completo diretamente no console. Vá para Indexes->Full Text (Índices->Texto completo) e selecione o índice de texto completo que você acabou de criar. Digite um termo de pesquisa (se estiver usando a amostra de viagem, "inn" (pousada), "skyscraper" (arranha-céu) ou "bed and breakfast" (cama e café da manhã) são bons termos para tentar).

Using the full text search

Ao clicar em pesquisar, você receberá uma página de resultados de pesquisa (ID do documento e um fragmento de conteúdo) em ordem de pontuação de relevância. Observe que os termos de pesquisa são destacados no fragmento de conteúdo. A ativação de "store" no campo filho faz com que isso funcione. Se você não ativar o armazenamento, ainda obterá os resultados do documento em ordem de relevância, mas não obterá o fragmento de conteúdo destacado.

Full Text Search results in Couchbase Console

Observe que a pesquisa de texto completo usa Blevee permite que você faça pesquisas mais complexas (frases exatas, consultas booleanas, etc.). Tente pesquisar "cama e café da manhã" ou café da manhãpor exemplo, e veja o que acontece.

Consulta de pesquisa de texto completo com destaque no ASP.NET

Quando estiver satisfeito com o índice de pesquisa de texto completo que você criou, é hora de tirá-lo do Console do Couchbase e colocá-lo em um aplicativo real. Criei um exemplo em ASP.NET que demonstra como usar o SDK do Couchbase .NET para executar uma pesquisa de texto completo. Para este exemplo, presumo que você esteja familiarizado com o ASP.NET MVC e com os princípios básicos da integração do ASP.NET com o Couchbase. Se esse não for o caso, recomendo que você leia o artigo Exemplo do ASP.NET "Hello World" sobre o qual escrevi no blog anteriormente.

Criei duas ações: Index e Search. A ação Index mostra uma exibição que permite que um usuário digite uma string de pesquisa. Aqui estão o controlador e a ação:

E aqui está a exibição em Index.cshtml:

Não é bonito, mas é funcional. Em seguida, criei uma ação Search. Essa ação receberá a consulta de pesquisa e produzirá os resultados do Couchbase. Os resultados serão muito parecidos com o que vimos no Console do Couchbase: ID do documento, pontuação de relevância e fragmentos destacados.

Há três etapas para a execução de uma pesquisa de texto completo:

  1. Instanciar algum objeto que implemente ISearchQuery. Há muitas opções; estou usando MatchQuery para este exemplo.
  2. Instanciar um objeto SearchParams para especificar as opções de pesquisa.
  3. Use um IBucket para executar a consulta + parâmetros e obter resultados.

Neste exemplo, realizei todas as três etapas diretamente na ação Search:

Algumas observações sobre o SearchParams:

  • Estou limitando-o aos 10 primeiros. Há também um método Skip() que você pode usar para paginação.
  • Estou definindo um tempo limite de 10000ms. Se eu criar o índice corretamente, os resultados serão retornados muito rapidamente, mas se eu mexer no índice e algo der errado, quero que a pesquisa falhe rapidamente.
  • Estou definindo o estilo de destaque como HTML. Isso colocará o ao redor dos termos de pesquisa destacados nos resultados do fragmento.

Também criei um SearchResultsModel modelo de visualização. Isso faz o mapeamento de que preciso para obter o ID do documento, a pontuação e os fragmentos dos resultados da pesquisa (bem como as palavras-chave que o usuário digitou).

Por fim, aqui está a visualização Search.cshtml:

Não é uma página HTML muito bonita, mas é funcional. Veja como ela se parece em ação:

Full Text Search results in ASP.NET

Conclusão

Lembre-se de que esse recurso é apenas uma prévia para desenvolvedores: ainda não há suporte para ele e ainda não é recomendado para produção. Mas a pesquisa de texto completo está chegando ao Couchbase. Na verdade, você pode opinar sobre como o recurso será implementado. Dê uma olhada no Pesquisa de texto completo RFC no GitHubE fique à vontade para fazer perguntas ou deixar comentários.

Ainda tem dúvidas? Precisa de ajuda com alguma coisa? Deixe um comentário, me envie uma mensagem no Twitterou envie um e-mail para mim (matthew.groves AT couchbase DOT com).

Autor

Postado por Matthew Groves

Matthew D. Groves é um cara que adora programar. Não importa se é C#, jQuery ou PHP: ele enviará solicitações de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente sênior de marketing de produtos da Couchbase. Seu tempo livre é passado com a família, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele é autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.

Deixar uma resposta