Visão geral
Neste guia, você aprende a usar o driver Kotlin para executar queries de pesquisa do MongoDB Search em uma coleção. O MongoDB Search permite que você realize pesquisas de texto completo em coleções hospedadas no MongoDB. Os índices do MongoDB Search especificam o comportamento da pesquisa e quais campos indexar.
Dados de amostra
The examples in this guide use the movies collection in the sample_mflix database from the Atlas sample datasets. To learn how to create a free MongoDB Atlas cluster and load the sample datasets, see the Get Started guide. To learn more about aggregation operations and builders, see the Aggregation guide.
Executar uma query de pesquisa do MongoDB
Esta seção mostra como criar um pipeline de agregação para executar uma query de pesquisa do MongoDB Search em uma coleção. Você pode usar o método construtor Aggregates.search() para criar um estágio de pipeline $search, que especifica os critérios de pesquisa. Em seguida, chame o método aggregate() e passe seu pipeline como um parâmetro.
Observação
Disponível apenas no Atlas para MongoDB v4.2 e posterior
This aggregation pipeline operator is only available for collections hosted on MongoDB Atlas clusters running v4.2 or later that are covered by a MongoDB Search index. Learn more about the required setup and the functionality of this operator from the MongoDB Search documentation.
Antes de executar uma query do MongoDB Search, você deve criar um índice do MongoDB Search na sua coleção. Para aprender a criar programaticamente um índice do MongoDB Search, consulte a seção Índices do MongoDB Search e do MongoDB Vector Search no guia sobre Índices.
Exemplo de pesquisa do MongoDB
Antes de executar este exemplo, você deve criar um índice do MongoDB Search na coleção de filmes que tenha a seguinte definição:
{ "mappings": { "dynamic": false, "fields": { "title": { "type": "string" } } } }
Este exemplo executa uma query de pesquisa do MongoDB Search executando as seguintes ações:
Constrói uma etapa
$searchusando o método construtorAggregates.search(), instruindo o driver a fazer query de documentos em que o campotitlecontém a palavra"Alabama"Constrói um estágio
$projectusando o método construtorAggregates.project(), instruindo o driver a incluir o campotitlenos resultados da queryPassa as fases do pipeline para o método
aggregate()e imprime os resultados
val pipeline: List<Bson> = listOf( search(SearchOperator.text( fieldPath("title"), "Alabama")), project(Projections.include("title")) ) val results = collection.aggregate(pipeline) results.collect { doc -> println(doc.toJson()) }
Metadados de pesquisa do MongoDB
Use the searchMeta() method to create a $searchMeta pipeline stage, which returns only the metadata from the Atlas full-text search results.
Dica
Disponível apenas no Atlas para MongoDB v4,4,11 e posterior
This aggregation pipeline operator is available only on MongoDB Atlas clusters running v4.4.11 and later.
Antes de executar este exemplo, você deve criar um índice do MongoDB Search na coleção de filmes que tenha a seguinte definição:
{ "mappings": { "dynamic": false, "fields": { "year": { "type": "number" } } } }
O exemplo a seguir mostra os metadados near para um estágio de agregação do MongoDB pesquisa:
searchMeta( SearchOperator.near(2010, 1, fieldPath("year")) )
Criar estágios de pesquisa de pipeline
O driver Kotlin fornece métodos 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 aprender mais sobre a criação de índices do MongoDB Search, consulte a seção Índices do MongoDB Search e MongoDB Vector Search do guia Índices.
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() .filter( listOf( SearchOperator.`in`(fieldPath("genres"), listOf("Comedy")), SearchOperator.phrase(fieldPath("fullplot"), "new york"), SearchOperator.numberRange(fieldPath("year")).gtLt(1950, 2000), SearchOperator.wildcard(fieldPath("title"), "Love *") ) ) ) val projectStage = Aggregates.project( Projections.include("title", "year", "genres")) val pipeline = listOf(searchStage, projectStage) val results = collection.aggregate(pipeline)
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
To learn more about MongoDB Search, see MongoDB Search in the Atlas documentation.
Documentação da API
Para saber mais sobre os métodos mencionados neste guia, consulte a seguinte documentação da API: