Os índices são os infraestrutura que possibilita a pesquisa de texto completo.
O novo recurso Scopes and Collections do Couchbase Server 7.0 torna a pesquisa de texto completo em seus aplicativos mais poderosa do que nunca. Para potencializar essas pesquisas, são necessários índices de texto completo.
Este artigo fornece uma visão geral dos escopos e coleções em Couchbase e orienta você na criação de um índice de texto completo por meio do novo Couchbase Quick Editor. Também veremos as alterações no Standard Editor para acomodar Scopes e Collections.
O que é pesquisa de texto completo?
A Pesquisa de Texto Completo (FTS) refere-se a técnicas de pesquisa de texto em um documento ou em uma coleção de documentos. O Couchbase oferece suporte à indexação e à pesquisa de texto em vários idiomas e fornece analisadores de texto personalizáveis para interpretar o texto de várias maneiras por meio de tokenizadores, filtros etc.
O paradigma de Coleções em um bucket do Couchbase permite que os usuários definam índices que podem se inscrever em vários Escopos e Coleções. Mas o que, exatamente, são Escopos e Coleções?
O que são escopos e coleções?
Um bucket do Couchbase - o banco de dados distribuído, particionado e baseado em documentos - é o núcleo do Servidor Couchbase. Com a versão 7.0Se você estiver usando o recurso de classificação, poderá categorizar documentos configurando compartimentos para formar uma hierarquia organizacional. Cada categoria é mantida em um sub-bucket (que também é particionado); esse sub-bucket é um Coleção. Cada bucket agora é gerenciado por meio de uma hierarquia de três camadas, como você pode ver na imagem abaixo.
Aqui está um exemplo de bucket e sua categorização com Escopos e Coleções para um menu de restaurante. (Para obter mais contexto sobre a relação entre Escopos e Coleções, leia isto Introdução à compreensão de escopos e coleções.)
Para essa hierarquia de bucket, você pode definir um índice de pesquisa de texto completo para assinar e indexar dados como:
-
- O conteúdo de todos os tacos vegetarianos dentro do alimentos Escopo do menu
- As carnes usadas em todos os hambúrgueres do alimentos Escopo do menu
- Os tipos de coquetéis e bebidas à base de café no bebida Escopo do menu
Você já entendeu a ideia.
Observação: Você pode definir um índice de texto completo para se inscrever em várias coleções, mas todas essas coleções devem pertencer a um único escopo. Uma definição de índice não pode transcender um escopo.
Vamos falar sobre definições de índices
A captura de tela abaixo mostra como adicionar um índice no editor padrão do Couchbase (como era no Couchbase Server 6.6).
Na captura de tela acima, pretendo indexar todo o conteúdo nos documentos JSON do bucket amostra de cerveja que tem um campo tipo cujo valor é cerveja. Observe a visualização da definição do índice no lado direito da tela, que contém todas as configurações do índice cervejas. Essa visualização se adapta imediatamente a qualquer alteração que fizermos nas configurações.
Como você pode ver, há muitas configurações na definição do índice. E Servidor Couchbase 7.0 inclui ainda mais variações para dar suporte a Collections, o que pode torná-lo assustador, especialmente para novos usuários.
É por isso que introduzimos o Quick Editor para definir índices. Com ele, os novos usuários (ou qualquer pessoa que não queira se aprofundar em configurações avançadas para seus índices de pesquisa de texto completo) podem começar a usar o Serviço de Pesquisa do Couchbase. Antes de nos aprofundarmos no Quick Editor em detalhes, vamos ver como a versão 7.0 atualizou a definição de um índice de texto completo para acomodar as coleções. Fique à vontade para Ir diretamente para a discussão sobre o Quick Editor se você preferir.
Como o Couchbase Server 7.0 atualiza as definições de índice de texto completo
Vamos examinar rapidamente as atualizações da definição de um índice de texto completo no Couchbase 7.0 para acomodar Escopos e Coleções. Observe que o Couchbase continuará a oferecer suporte a definições de índice mais antigas de versões anteriores do Couchbase Server.
Vamos continuar com o exemplo que usei anteriormente: o cervejas índice no bucket do Couchbase amostra de cerveja. Removendo as configurações padrão e mantendo apenas as configurações relevantes, aqui está uma definição de índice mínimo para ele:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{ "tipo": "fulltext-index", "name" (nome): "cervejas", "sourceType": "couchbase", "sourceName": "amostra de cerveja", "params": { "doc_config": { "mode" (modo): "type_field", "type_field": "tipo" }, "mapeamento": { "tipos": { "cerveja": { "dinâmico": verdadeiro, "habilitado": verdadeiro } } }, "loja": { "indexType": "scorch" (queimar) } } } |
Em termos de 7.0, todo esse conteúdo no balde amostra de cervejas reside no Padrão Coleção do Padrão Escopo - o que significa que quando você atualiza o Couchbase para a versão 7.0, os dados em seu bucket são movidos para o escopo Padrão Coleção dentro do Padrão Escopo.
A definição de índice acima funciona com a versão 7.0. No entanto, aqui está uma alternativa: uma definição de índice da versão 7.0 que faz exatamente a mesma coisa que a anterior.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{ "tipo": "fulltext-index", "name" (nome): "cervejas", "sourceType": "gocbcore", "sourceName": "amostra de cerveja", "params": { "doc_config": { "mode" (modo): "scope.collection.type_field", "type_field": "tipo" }, "mapeamento": { "tipos": { "_default._default.beer": { "dinâmico": verdadeiro, "habilitado": verdadeiro } } }, "loja": { "indexType": "scorch" (queimar) } } } |
Observe as três diferenças entre as duas definições acima:
-
sourceTypefoi alterado de couchbase para gocbcore. Alteramos o SDK subjacente que o índice de texto completo usa para se comunicar com um bucket do Couchbase para um mais novo e com melhor suporte.params.doc_config.modefoi alterado decampo_tipoparascope.collection.type_fieldindicando que os nomes de mapeamento de tipos agora seguem esse formato.- O nome do mapeamento do tipo agora se tornou
Padrão._Padrão._Cervejaindicando que ele indexa documentos detipo:cervejade dentro doPadrãoColeção noPadrãoEscopo do baldeamostra de cerveja.
As coleções ajudam a modelar melhor seus dados
Modelar seus dados em uma única coleção (imitando o comportamento pré-7.0) significa que todos os dados dentro do bucket são enviados e o índice deve filtrar os documentos com base na definição.
Com Escopos e Coleções, você pode modelar seus dados em categorias, cada uma das quais reside em uma Coleção separada. Destacarei uma vantagem óbvia dessa abordagem no exemplo a seguir.
O amostra de cerveja contém documentos do tipo cerveja e cervejaria todos residentes na Padrão Coleção do Padrão Escopo. Vamos mudar esse modelo:
- Configurar um escopo
conteúdodentro deamostra de cerveja. - No escopo, configure duas coleções:
cervejasecervejarias. - Carregar dados de
tipo:cervejaemcervejase dados detipo:cervejariaemcervejarias.
Aqui está uma definição de índice para manter os mesmos dados que os anteriores: ...
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
{ "tipo": "fulltext-index", "name" (nome): "cervejas", "sourceType": "gocbcore", "sourceName": "amostra de cerveja", "params": { "doc_config": { "mode" (modo): "scope.collection.type_field", "type_field": "tipo" }, "mapeamento": { "tipos": { "content.beers": { "dinâmico": verdadeiro, "habilitado": verdadeiro } } }, "loja": { "indexType": "scorch" (queimar) } } } |
Desta vez, a caçamba envia documentos de apenas tipo:cerveja. Portanto, com a definição de índice mais recente, seus nós de pesquisa seriam:
-
- Consome menos largura de banda da rede
- Beneficie-se de tempos de criação de índices mais rápidos
Dê uma olhada nisso publicação do blog complementar para obter mais detalhes sobre as nuances das definições do índice de texto completo com as coleções de baldes do Couchbase.
Apresentando o Quick Editor
Aqui está uma olhada no novo Quick Editor:
Quando você seleciona um bucket, um escopo e uma coleção nos campos de espaço-chave mostrados na captura de tela, um documento de amostra aparece na seção Selecionar campos; ele pertence ao bucket.scope.collection selecionado. Um botão de atualização no canto superior direito da seção Select Fields (Selecionar campos) permite iterar pelos documentos (aleatoriamente) dentro da coleção.
Agora você pode selecionar um campo do documento (clicando no nome/valor do campo). O campo selecionado é exibido para configuração na seção Configurar campos. O tipo do campo é detectado automaticamente (atualmente, somente texto, número e Booleano são reconhecidos). Se o campo fosse data e hora (string in ISO-8601 ) ou um ponto geográfico (um objeto, uma matriz ou um geohash), você precisará selecionar explicitamente o tipo no menu suspenso Type (Tipo).
Quando o campo configurado é Adicionar-ed, ele aparece na seção Mapped Fields (Campos mapeados), como pode ser visto abaixo. É possível editar um campo mapeado a qualquer momento, selecionando-o novamente na seção Select Fields (Selecionar campos) ou na seção Mapped Fields (Campos mapeados).
O botão Create Index (Criar índice), na parte inferior da página, permite que você crie o índice.
Aqui estão as configurações disponíveis para a configuração de um campo:
-
- Tipo é o tipo do valor do campo. Os tipos compatíveis são texto, número, booleano, ponto geográfico e data e hora, conforme detalhado acima.
- Indexar esse campo como um identificador aparece somente se o tipo de campo escolhido for texto. Se selecionada, essa opção aplicará o analisador de palavras-chave para o texto.
- O Idioma O menu suspenso estará disponível se o tipo de campo for texto e o campo não é indexado como um identificador. No menu suspenso Idioma, você pode escolher o analisador para o campo de texto.
- As próximas quatro caixas de seleção se traduzem essencialmente em uma única opção ou em uma combinação de opções (como no Editor Padrão) compatíveis com um campo:
Você pode Encontre mais documentação sobre essas opções aqui.
-
- A última seção é para definir Pesquisável comoque recebe uma entrada de texto que serve como alias para o campo. Essa configuração é opcional e o padrão é o nome do campo selecionado. Durante a pesquisa, a entrada nessa seção é o campo a ser procurado.
Você pode editar uma configuração de índice de dentro do Editor rápido a qualquer momento, usando o Editor rápido ou o Editor padrão.
Opções limitadas no Quick Editor
-
- Conforme observado anteriormente, para simplificar, o Quick Editor oferece opções limitadas para configurar as definições de índice.
- Não é possível indexar um campo que não esteja disponível no documento de amostra carregado na seção Selecionar campos.
- Não há suporte para analisadores personalizados.
- Geoponto e Data e hora não são reconhecidos automaticamente. No entanto, é possível definir explicitamente o tipo de campo na seleção.
- Não é possível usar o Editor rápido para editar um índice criado com o Editor padrão. Entretanto, você pode usar o Editor padrão para editar um índice criado com o Editor rápido.
- Embora seja possível configurar campos em várias coleções, não é possível indexar o mesmo campo várias vezes em uma única coleção.
- O Quick Editor não oferece suporte à filtragem de documentos em um
escopo.coleção(para indexar apenas documentos de um determinado tipo). - Você não pode definir réplicas de índice, tipo de índice ou partições de índice no Editor rápido. Eles assumirão os valores padrão quando você criar um índice. No entanto, você pode alterar essas configurações usando o Editor padrão e, posteriormente, editar a definição do índice usando o Editor rápido, desde que o
params.mappingeparams.doc_configda definição do índice não são alteradas no Editor padrão*.
*Esse comportamento pode mudar à medida que ampliarmos o suporte no Quick Editor.
Alterações no editor padrão
A primeira coisa que você pode notar que é diferente é uma nova caixa de seleção sob as entradas Index Name e Bucket, perguntando se você deseja configurar o índice para assinar um escopo não padrão ou uma coleção não padrão:
Ativação dos prefixos da caixa de seleção escopo.coleção para o params.doc_config.mode dentro da definição do índice, o que implica que o índice pode assinar uma ou mais coleções de dentro de um escopo. Esse escopo.coleção O prefixo funciona em combinação com as configurações existentes campo_tipo, prefixo docid e docid_regexp para filtrar os documentos a serem indexados.
Se você verificar o Usar escopo/coleção(ões) não padrão é exibida uma lista suspensa. Nela, você pode selecionar um escopo entre os escopos disponíveis para o bucket escolhido:
Agora, nos mapeamentos de tipo, você será solicitado a selecionar uma Coleção em um menu suspenso. (Observe que o mapeamento de tipo padrão deve ser desmarcado se você escolher uma seleção de escopo não padrão, pois uma definição de índice não pode transcender um escopo).
Depois de selecionar uma coleção, você tem a opção de anexar um nome de tipo ao campo . com base no identificador de tipo que você selecionou para filtrar os documentos a serem indexados na coleção. Você pode editar esse mapeamento de tipos a qualquer momento. E, assim como antes, você pode adicionar submapeamentos e campos filhos dentro do mapeamento de tipos.
O restante da funcionalidade do Editor Padrão permanece inalterado.
Pesquisa em um índice de texto completo com reconhecimento de coleção
A interface do usuário para pesquisa em um índice de pesquisa de texto completo não foi alterada. A caixa de texto suporta apenas uma string de consulta. Veja esta página de documentação sobre outros tipos de consultas compatíveis com o índice de texto completo.
As solicitações de pesquisa que vão diretamente para o ponto de extremidade agora usam um novo argumento (opcional) para buscar apenas resultados de uma coleção ou de um conjunto de coleções que o índice de texto completo assina.
Aqui está um exemplo de solicitação de pesquisa:
|
1 2 3 4 5 6 7 |
enrolar -XPOST -H "Content-type:application/json" -u nome de usuário:senha http://IP:8094/api/index/index_name/query -d '{ "query" (consulta): {..}, "limite": 10, "offset": 0, "ctl": {..}, "coleções": ["collection1", "collection2"] }' |
Em o console da Web do CouchbaseNo entanto, você não pode definir o coleções para uma solicitação de pesquisa; a solicitação abrangerá o conteúdo indexado de todos Coleções às quais o índice se inscreve.
Vamos considerar um exemplo de definição de índice configurado usando o Quick Editor. Esse índice é assinante das coleções cerveja e cervejaria dentro do escopo conteúdo da caçamba padrão. Dentro dessas duas coleções, os campos de nome são indexados com as seguintes opções definidas:
-
- Incluir no(s) resultado(s) da pesquisa
- Destaque de suporte
Aqui está o conteúdo relevante da definição do índice:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
{ ... "name" (nome): "default", "sourceName": "default", "params": { "mapeamento": { "tipos": { "content.beer": { "dinâmico": falso, "habilitado": verdadeiro, "propriedades": { "name" (nome): { "dinâmico": falso, "habilitado": verdadeiro, "campos": [ { "analisador": "en", "include_in_all": verdadeiro, "include_term_vectors": verdadeiro, "loja": verdadeiro, "índice": verdadeiro, "name" (nome): "name" (nome), "tipo": "texto" } ] } } }, "content.brewery": { "dinâmico": falso, "habilitado": verdadeiro, "propriedades": { "name" (nome): { "dinâmico": falso, "habilitado": verdadeiro, "campos": [ { "analisador": "en", "include_in_all": verdadeiro, "include_term_vectors": verdadeiro, "loja": verdadeiro, "índice": verdadeiro, "name" (nome): "name" (nome), "tipo": "texto" } ] } } } } } } } |
Nos casos em que a definição do índice assina mais de uma coleção (como no exemplo acima) para uma pesquisa, a coleção à qual o documento pertence aparece como um campo armazenado com a chave _$c.
Aqui está um exemplo de snippet de resultados de pesquisa para a definição de índice de pesquisa de texto completo acima:
Saiba mais sobre o Couchbase 7.0
Pronto para se aprofundar no Couchbase 7.0 e em todos os seus recursos? Dê uma olhada nestes recursos:
-
- Gerenciar escopos e coleções
- O que há de novo na versão 7.0
- Notas de versão do Couchbase 7.0
- Como migrar para escopos e coleções no Couchbase 7.0
- Como os escopos e coleções simplificam as implementações de aplicativos multilocatários no Couchbase
- 5 etapas para simplificar suas consultas N1QL e migrar para coleções












