Visão geral
Neste guia, você aprenderá a usar o driver Scala para executar query de pesquisa do MongoDB Search em uma coleção. O MongoDB Search permite que você realize pesquisas de texto completo em suas coleções. Os índices do MongoDB Search especificam o comportamento da pesquisa e quais campos indexar.
Para saber como criar e gerenciar índices do MongoDB Search usando o driver Scala, consulte o guia Índices do MongoDB Search e do MongoDB Vector Search.
Dados de amostra
Os exemplos neste guia utilizam a coleção do movies no banco de dados do sample_mflix a partir do conjunto de dados de amostra do Atlas. Para **aprender** como criar um cluster gratuito do MongoDB Atlas e carregar os conjuntos de dados de amostra, consulte Introdução ao Atlas.
Executar uma query de pesquisa do MongoDB
Observação
O MongoDB Search está disponível nas seguintes implantações:
MongoDB Atlas v4.2 ou posterior
MongoDB Community Edition v8.2 ou posterior
Sua coleção deve ter um índice do MongoDB Search para executar query de pesquisa do MongoDB Search. Para saber como criar um índice do MongoDB Search, consulte o guia Índice do MongoDB Search e do MongoDB Vector Search.
Para realizar uma pesquisa de texto completo, chame o método aggregate() com um estágio de pipeline $search. O driver Scala fornece o método assistente Aggregates.search() para criar este estágio. O método search() requer os seguintes argumentos:
SearchOperatorinstância que especifica o campo e o texto a serem pesquisadosSearchOptionsinstância que especifica opções para personalizar a pesquisa, incluindo o nome do índice de pesquisa do MongoDB a ser usado
O exemplo a seguir pesquisa o campo title para o texto "Alabama" e projeta apenas o campo _id, que está incluído por padrão, e o campo title dos documentos correspondentes:
val operator = SearchOperator.text( SearchPath.fieldPath("title"), "Alabama") val options = searchOptions().index("<search index name>") val pipeline = Seq( Aggregates.search(operator, options), Aggregates.project(Projections.include("title")) ) try { Await .result(collection.aggregate(pipeline).toFuture(), 20.seconds) .foreach((doc: Document) => println(doc.toJson())) } catch { case e: Throwable => println(s"There was an error: $e") }
{"_id": {"$oid": "..."}, "title": "Alabama Moon"} {"_id": {"$oid": "..."}, "title": "Crazy in Alabama"} {"_id": {"$oid": "..."}, "title": "Sweet Home Alabama"}
Dica
Para ver tutoriais do MongoDB Search na documentação do Atlas, consulte Executar query de pesquisa do Atlas.
Metadados de pesquisa do MongoDB
Observação
Os metadados do MongoDB Search estão disponíveis nas seguintes implantações:
MongoDB Atlas v4.4.11 ou posterior
MongoDB Community Edition v8.2 ou posterior
Use o método assistente Aggregates.searchMeta() para recuperar apenas os metadados de uma query de pesquisa do MongoDB sem retornar os resultados da pesquisa. O exemplo a seguir retorna metadados para uma query que pesquisa o campo year para valores próximos a 2010:
try { Await .result( collection.aggregate(Seq( Aggregates.searchMeta( SearchOperator.near(2010, 1, SearchPath.fieldPath("year"))) )).toFuture(), 20.seconds ) .foreach((doc: Document) => println(doc.toJson())) } catch { case e: Throwable => println(s"There was an error: $e") }
{"count": {"lowerBound": 35}}
Usar operadores de pesquisa
O driver Scala fornece métodos de assistente para os seguintes operadores:
Operador | Descrição |
|---|---|
Executa uma pesquisa por uma palavra ou frase que contém uma sequência de caracteres de uma string de entrada incompleta. | |
Combina dois ou mais operadores em uma única query. | |
Verifica se um campo corresponde a um valor que você especificou. Mapeia para os métodos | |
Testa se existe um caminho para um nome de campo indexado especificado em um documento. | |
Executa uma pesquisa por uma array de valores de número BSON, data, boolean, ObjectId, uuid ou string no caminho fornecido e retorna documentos em que o valor do campo é igual a qualquer valor na array especificada. | |
Retorna documentos semelhantes aos documentos de entrada. | |
Suporta a consulta e pontuação de valores numéricos, de data e de ponto GeoJSON . | |
Executa uma pesquisa de documentos contendo uma sequência ordenada de termos usando o analisador especificado na configuração do índice. | |
Suporta a realização de query de uma combinação de campos e valores indexados. | |
Suporta a consulta e pontuação de valores numéricos, de data e de cadeia de caracteres. Mapeia para os métodos | |
Interpreta o campo de query como uma expressão regular. | |
Executa uma pesquisa de texto completo usando o analisador especificado na configuração do índice. | |
Habilita queries que usam caracteres especiais na string de pesquisa que podem corresponder a qualquer caractere. |
Exemplo de estágio de pesquisa de pipeline
Antes de executar este exemplo, você deve criar um índice de pesquisa MongoDB na coleção movies que tem a seguinte definição:
{ "mappings": { "dynamic": true, "fields": { "title": { "analyzer": "lucene.keyword", "type": "string" }, "genres": { "normalizer": "lowercase", "type": "token" } } } }
Para saber mais sobre a criação de índices do MongoDB Search, consulte o guia MongoDB Search e MongoDB Vector Search Indexes.
O seguinte código cria um estágio $search que tem as seguintes especificações:
Verifica se a array
genresinclui"Comedy"Pesquisa no campo
fullplota frase"new york"Corresponde a
yearvalores entre1950e2000, inclusivePesquisa valores
titleque começam com o termo"Love"
val searchStage = Aggregates.search( SearchOperator.compound() .must( Iterable( SearchOperator.in(fieldPath("genres"), List("Comedy")), SearchOperator.phrase(fieldPath("fullplot"), "new york"), SearchOperator.numberRange(fieldPath("year")).gtLt(1950, 2000), SearchOperator.wildcard("Love *", fieldPath("title")), ).asJava ) ) val projectStage = Aggregates.project( Projections.include("title", "year", "genres")) try { Await .result( collection.aggregate(Seq(searchStage, projectStage)).toFuture(), 20.seconds ) .foreach((doc: Document) => println(doc.toJson())) } catch { case e: Throwable => println(s"There was an error: $e") }
{"_id": ..., "genres": ["Comedy", "Romance"], "title": "Love at First Bite", "year": 1979} {"_id": ..., "genres": ["Comedy", "Drama"], "title": "Love Affair", "year": 1994}
Para saber mais sobre os métodos assistente de pesquisa do MongoDB, consulte a referência da interface SearchOperator na documentação da Core API driver.
Informações adicionais
Para saber mais sobre o MongoDB Search, consulte Visão geral do MongoDB Search na documentação do Atlas.
Documentação da API
Para saber mais sobre os métodos e tipos discutidos neste guia, consulte a seguinte documentação da API: