Quantas vezes você já escreveu uma consulta SQL que usava um GOSTO e alguns curingas para localizar texto em uma cadeia de caracteres? Que tipo de desempenho você obteve ao executar isso em milhões de registros? Provavelmente não foi bom, certo?
Embora você possa usar curingas no SQL, essa provavelmente não é a melhor maneira para a maioria dos cenários. Isso inclui as consultas N1QL. Em vez disso, conheça o Full Text Search (FTS), uma tecnologia que já existe há algum tempo, mas que foi recentemente incluída no Couchbase Servidor.
A pesquisa de texto completo encontrada no Couchbase é baseada em Bleveuma biblioteca de pesquisa e indexação escrita em Golang.
Pesquisa difusa com pesquisa de texto completo no Couchbase
Ao comparar o FTS com uma consulta SQL ou N1QL curinga, há mais para comparar do que apenas o aspecto do desempenho. Veja, por exemplo, sua capacidade de correspondência de forma difusa. Vamos supor que tenhamos a seguinte consulta:
|
1 |
SELECT * FROM `default` WHERE message LIKE '%bananas%'; |
O que acontece se o banco de dados tiver um registro contendo Bananas com maiúscula B? Nessa circunstância, ela não seria incluída nos resultados. O que acontece se você for como eu e não souber soletrar, deixando resultados como bananas no banco de dados? Ele também não será incluído nos resultados.
Com a Pesquisa de texto completo, a seguinte consulta pode ser feita com um fator de imprecisão:
|
1 |
banana~2 |
Ignorando o fato de que o SQL e o FTS têm uma sintaxe de consulta diferente, a resposta acima ofereceria dois fatores de imprecisão. Isso significa que dois caracteres no termo de pesquisa podem ser alterados para chegar ao nosso resultado. Nossos dados podem incluir qualquer um dos seguintes itens:
|
1 2 3 4 |
banana bannanna bana bnan |
Isso não se limita apenas aos quatro itens acima, mas você já entendeu a ideia.
No entanto, e se nosso banco de dados contiver bandana que, nesse caso, não é um erro de digitação. Será que realmente queremos que buscas por outros itens legítimos apareçam em nossos resultados?
Ao executar uma consulta de pesquisa de texto completo para um termo ou conjunto de termos, cada resultado é pontuado com base em sua relevância para a consulta de pesquisa inicial. Você pode envolver sua lógica comercial nos resultados pontuados.
Os diferentes tipos de consultas na pesquisa de texto completo do Couchbase
Há muitos tipos diferentes de Tipos de consultas FTS que podem ser realizadas no Couchbase. O tipo de consulta que mencionei até agora é melhor classificado como uma consulta de correspondência, em que o termo de pesquisa é usado para fazer a correspondência com o índice com e sem imprecisão.
Alguns outros tipos de consultas incluem, mas não se limitam a:
- Match, Phrase, Fuzzy, Prefix, Regexp, Wildcard, Boolean Field
- Conjunção, disjunção, booleano, ID do documento
- Intervalo de datas, intervalo numérico
- Cadeia de consulta
Cada tipo de consulta é projetado para uma tarefa diferente. Mais informações sobre o que elas fazem podem ser encontradas na seção documentação oficial com relação aos tipos de consultas.
Criação de um índice de pesquisa de texto completo no Couchbase
Antes que a pesquisa possa ser feita, um índice deve ser criado. Isso não deve ser confundido com os índices N1QL, pois são duas coisas muito diferentes.

No painel administrativo do Couchbase, você terá a oportunidade de criar índices de pesquisa de texto completo.
Para criar um índice, você precisará nomeá-lo e atribuir-lhe um bucket. É necessário fazer um mapeamento, portanto, você deve especificar qual propriedade do documento representa o tipo de documento JSON que ele é. Veja, por exemplo, o seguinte:
|
1 2 3 4 5 |
{ "type": "person", "firstname": "Nic", "lastname": "Raboy" } |
O tipo A propriedade obviamente diz que esse documento específico é um pessoa documento.
Com o tipo JSON mapeado para o tipo de documento, outros mapeamentos devem ocorrer. Por exemplo, digamos que esse índice específico seja para pessoa documentos. Um novo mapeamento de tipos deve ser criado e nomeado adequadamente para o que pode existir no tipo propriedade.
Agora, dependendo de como deseja indexar os campos, você pode optar por indexar tudo ou indexar apenas determinadas propriedades. Se quiser indexar determinadas propriedades, você adicionará um novo campo filho abaixo do mapeamento de tipo que acabamos de criar.
Indexar determinadas propriedades significa que, quando a pesquisa for executada, somente essas propriedades serão pesquisadas, e não todos os campos do documento.
Inclusão do FTS em seus aplicativos
Com um índice criado, provavelmente queremos incluir a funcionalidade em um aplicativo usando um dos vários SDKs do Couchbase Server.
Digamos que queremos fazer uma consulta de correspondência com o Node.js. O código pode ser parecido com o seguinte:
|
1 2 3 4 5 |
var SearchQuery = Couchbase.SearchQuery; var query = SearchQuery.new("INDEX-NAME-HERE", SearchQuery.match("SEARCH-QUERY-HERE")); query.fields(["FIELDS", "TO", "RETURN", "WITH", "PATH", "DEFINED"]); query.highlight(SearchQuery.HighlightStyle.HTML, "FIELD"); bucket.query(query, callback); |
No exemplo acima, uma nova consulta é criada em relação a um índice especificado. O termo de pesquisa é passado para essa consulta. A consulta pode ser ainda mais personalizada para incluir determinados campos na resposta, bem como se o resultado da pesquisa deve receber marcação HTML para destacá-lo.
A mesma coisa pode ser feita em Java com o seguinte código:
|
1 2 3 4 |
MatchQuery fts = SearchQuery.match("SEARCH-QUERY-HERE"); SearchQuery query = new SearchQuery("INDEX-NAME-HERE", fts); query.fields("FIELDS", "TO", "RETURN"); query.highlight(HighlightStyle.HTML, "FIELD"); |
Percebeu as semelhanças entre as duas linguagens muito diferentes? As APIs entre os SDKs devem ser semelhantes e podem ser facilmente estendidas, por exemplo, um valor de imprecisão pode ser adicionado.
Conclusão
O Full Text Search (FTS) é um recurso incrível do Couchbase Server 5.0 e superior. Ele permite que você faça buscas de forma muito eficiente e mais natural do que adicionar um monte de caracteres curinga a uma consulta N1QL.
Para obter mais informações sobre o FTS, consulte o site Portal do desenvolvedor do Couchbase.