Menu Docs
Página inicial do Docs
/ / /
Driver de sincronização Java

Atlas Search

Neste guia, você pode aprender como utilizar o motorista Java para executar queries doAtlas Search em uma coleção. O Atlas Search permite realizar pesquisas de texto completo em collections hospedadas no MongoDB Atlas. Os índices do Atlas Search especificam o comportamento da busca e quais campos indexar.

Os exemplos deste guia usam a coleção movies no banco de dados sample_mflix dos conjuntos de dados de amostra do Atlas. Para saber como criar um cluster MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte o guia Iniciar com Atlas. Para saber mais sobre operações de agregação e construtores, consulte o guiaAgregação .

Esta seção mostra como criar um pipeline de agregação para executar uma query do Atlas 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

Esse operador de pipeline de agregação só está disponível para coleções hospedadas em clusters do MongoDB Atlas executando v4.2 ou posterior que são cobertas por um índice de Atlas Search. Saiba mais sobre a configuração necessária e a funcionalidade desse operador na documentação do Atlas Search .

Antes de executar uma query do Atlas Search, você deve criar um índice do Atlas Search na sua collection. Para saber como criar programaticamente um índice do Atlas Search, consulte a seção Índices do Atlas Search e Vector Search no guia Índices.

Este exemplo executa uma query do Atlas Search executando as seguintes ações:

  • Constrói um estágio $search usando o método construtor Aggregates.search(), instruindo o driver a fazer query de documentos nos quais o campo title contém a palavra "Alabama"

  • Constrói um estágio $project usando o método construtor Aggregates.project(), instruindo o driver a incluir o campo title nos resultados da query

  • Passa os estágios do pipeline para o método aggregate() e imprime os resultados

collection.aggregate(
Arrays.asList(
Aggregates.search(SearchOperator.text(
SearchPath.fieldPath("title"), "Alabama")),
Aggregates.project(Projections.include("title"))
)
).forEach(doc -> System.out.println(doc.toJson()));
{"_id": {"$oid": "..."}, "title": "Alabama Moon"}
{"_id": {"$oid": "..."}, "title": "Crazy in Alabama"}
{"_id": {"$oid": "..."}, "title": "Sweet Home Alabama"}

Dica

Exemplos de Atlas Search Driver Java

Para visualizar mais exemplos que utilizam o driver Java para executar queries do Atlas Search, consulte Tutoriais do Atlas Search na documentação do Atlas.

Use o método searchMeta() para criar um estágio de pipeline $searchMeta, que retorna somente os metadados dos resultados da pesquisa de texto completo do Atlas.

Dica

Disponível apenas no Atlas para MongoDB v4,4,11 e posterior

Esse operador de pipeline de agregação está disponível somente em clusters do MongoDB Atlas que executam a v4.4.11 e posterior. Para uma lista detalhada de disponibilidade de versão, consulte a documentação do MongoDB Atlas em $searchMeta.

O exemplo a seguir mostra os metadados near para um estágio de agregação de pesquisa do Atlas:

Aggregates.searchMeta(
SearchOperator.near(2010, 1, fieldPath("year")));

Saiba mais sobre esse assistente na documentação da API searchMeta().

O driver Java 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 equals() e equalsNull()

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 numberRange() e dateRange()

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.

Observação

Conjunto de Dados de Amostra do Atlas

Este exemplo utiliza a collection sample_mflix.movies a partir do conjunto de dados de amostra do Atlas. Para saber como configurar um Atlas cluster de camada grátis e carregar o conjunto de dados de amostra, consulte o tutorial Introdução ao Atlas na documentação do Atlas.

Antes de executar este exemplo, você deve criar um índice do Atlas Search na coleção movies que tenha a seguinte definição:

{
"mappings": {
"dynamic": true,
"fields": {
"title": {
"analyzer": "lucene.keyword",
"type": "string"
},
"genres": {
"normalizer": "lowercase",
"type": "token"
}
}
}
}

Para saber mais sobre como criar índices do Atlas Search , consulte a seção Índices do Atlas Search e Vector Search do guia Índices.

O seguinte código cria um estágio $search que tem as seguintes especificações:

  • Verifica se a array genres inclui "Comedy"

  • Pesquisa no campo fullplot a frase "new york"

  • Corresponde a year valores entre 1950 e 2000, inclusive

  • Pesquisa title valores que começam com o termo "Love"

List<Bson> pipeline = new ArrayList<>();
pipeline.add(Aggregates.search(
SearchOperator.compound()
.filter(
List.of(
SearchOperator.in(fieldPath("genres"), "Comedy"),
SearchOperator.phrase(fieldPath("fullplot"), "new york"),
SearchOperator.numberRange(fieldPath("year")).gtLt(1950, 2000),
SearchOperator.wildcard(fieldPath("title"), "Love *")
))));
pipeline.add(Aggregates.project(
Projections.include("title", "year", "genres")
));
AggregateIterable<Document> results = collection.aggregate(pipeline);
results.forEach(doc -> System.out.println(doc.toJson()));
{"_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 do Atlas Search, consulte a referência da interface SearchOperator na documentação da API Driver Core.

Para saber mais sobre o Atlas Search, consulte Atlas Search na documentação do Atlas .

Para saber mais sobre os métodos mencionados neste guia, consulte a seguinte documentação da API:

Voltar

Execute um comando

Nesta página

  • Visão geral
  • Dados de amostra
  • executar uma query de pesquisa Atlas
  • Exemplo do Atlas Search
  • Metadados de Atlas Search
  • Criar estágios de pesquisa de pipeline
  • Exemplo de estágio de pesquisa de pipeline
  • Informações adicionais
  • Documentação da API