Neste capítulo, vamos apresentar a pesquisa de texto completo do MongoDB, que é diferente do operador "like" do SQL. A pesquisa de texto completo do MongoDB é mais eficiente para pesquisas de texto em comparação com a implementação do "like" no SQL.

Preparar dados de teste

Insira alguns registros na coleção de lojas

db.stores.insert(
   [
     { _id: 1, name: "Java Hut", description: "Café e bolos" },
     { _id: 2, name: "Burger Buns", description: "Hambúrgueres gourmet" },
     { _id: 3, name: "Coffee Shop", description: "Apenas café" },
     { _id: 4, name: "Clothes Clothes Clothes", description: "Roupas com desconto" },
     { _id: 5, name: "Java Shopping", description: "Produtos indonésios" }
   ]
)

Criar índice de texto

Para usar a capacidade de pesquisa de texto completo, você precisa criar um índice de texto. Exemplo:

db.stores.createIndex( { name: "text", description: "text" } )

Explicação:

  • Criar um índice do tipo texto para os campos de nome e descrição.

Observação: Uma coleção permite apenas um índice de texto, mas um índice de texto pode incluir vários campos.

Operador $text

Use o operador $text para pesquisa de texto.

Sintaxe:

{ $text: { $search: "palavra-chave da pesquisa" } }

Exemplo:

db.stores.find( { $text: { $search: "java café loja" } } )

Explicação:

  • Pesquisar documentos contendo as palavras-chave "café", "loja" e "java" nos campos de nome e descrição.

Saída:

{ "_id" : 3, "name" : "Coffee Shop", "description" : "Apenas café" }
{ "_id" : 1, "name" : "Java Hut", "description" : "Café e bolos" }
{ "_id" : 5, "name" : "Java Shopping", "description" : "Produtos indonésios" }

Pesquisa de frase

db.stores.find( { $text: { $search: "\"café loja\"" } } )

Saída

{ "_id" : 3, "name" : "Coffee Shop", "description" : "Apenas café" }

Classificação de relevância

Por padrão, os resultados de uma consulta $text não estão classificados. A consulta $text calcula uma pontuação (textScore) para a relevância de cada documento. Podemos usar esta pontuação para classificar e exibir documentos com maior relevância no topo.

db.stores.find(
   { $text: { $search: "java café loja" } },
   { score: { $meta: "textScore" } }  // Declare para retornar a pontuação de relevância textScore
).sort( { score: { $meta: "textScore" } } ) // Especificar a ordenação usando textScore

Observação: A pesquisa de texto completo do MongoDB não fornece suporte muito bom para frases em chinês.