Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

MongoDB Search

Neste guia, você pode aprender como usar o driver Java para executar query de pesquisa MongoDB em uma coleção. O MongoDB Search permite realizar pesquisas de texto completo em coleções hospedadas no MongoDB Atlas. Os índices de pesquisa do MongoDB especificam o comportamento da pesquisa e quais campos indexar.

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 uma implantação gratuita do MongoDB e carregar os conjuntos de dados de exemplo, consulte o Guia de Introdução do MongoDB. Para saber mais sobre operações de agregação e construtores, consulte o guia agregação.

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

Requisitos da versão do Atlas e Community Edition

O operador de pipeline de agregação $search está disponível somente para coleções hospedadas em clusters do MongoDB Atlas que executam o MongoDB v4.2 ou posterior, ou em clusters do MongoDB Community Edition que executam o MongoDB v8.2 ou posterior. As coleções devem ser cobertas por um índice de pesquisa do MongoDB. Para saber mais sobre a configuração necessária e a funcionalidade desse operador, consulte a documentação do MongoDB pesquisa.

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 Vector Search no guia de Índices.

Este exemplo executa uma query de pesquisa do MongoDB Search executando as seguintes ações:

  • Constrói uma etapa $search usando o método construtor Aggregates.search(), instruindo o driver a fazer query de documentos em que 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 as fases 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 MongoDB Search do Java Driver

Para ver mais exemplos que usam o driver Java para executar queries de pesquisa do MongoDB, consulte Tutoriais do MongoDB Search na documentação do Atlas.

Use o método searchMeta() para criar um estágio de pipeline $searchMeta que retorna somente a parte de metadados dos resultados do MongoDB Search.

Observação

Requisitos da versão do Atlas e Community Edition

Este operador de pipeline de agregação está disponível somente em clusters do MongoDB Atlas executando v4.4.11 e posterior, ou em clusters do MongoDB Community Edition executando MongoDB v8.2 ou 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 do MongoDB pesquisa:

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

Para saber mais sobre esse método assistente, consulte a documentação da API searchMeta().

O driver Java fornece métodos assistentes 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.

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 como criar índices do MongoDB Search, consulte a seção Índices do MongoDB Search e Vector Search do guia de Í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 valores title 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 de pesquisa do MongoDB, consulte a referência da interface SearchOperator na documentação da Core API driver.

Use os métodos estáticos vectorSearch() ou vectorSearchExact() na classe SearchOperator para realizar uma pesquisa vetorial em uma fase do pipeline de agregação $search. Esses métodos permitem combinar a pesquisa de similaridade vetorial com outros operadores do MongoDB Search, incluindo operadores que usam pré-filtros de texto analisados.

Observação

MongoDB pesquisa vetorial índice necessário

Para usar esses métodos, você deve ter um índice de MongoDB pesquisa vetorial configurado em sua coleção. Para aprender a criar um índice de pesquisa vetorial, consulte a seção Índices de MongoDB Search e MongoDB Vector Search no guia Índices.

Use o método vectorSearch() para realizar uma pesquisa de ANN (ANN). Use o método vectorSearchExact() para realizar uma pesquisa de vizinho mais próximo exato (ENN). Ambos os métodos aceitam os seguintes parâmetros:

Parâmetro
Tipo
Descrição

path

FieldSearchPath

O caminho para o campo vetorial indexado a ser pesquisado.

queryVector

Iterable<Double>

O vetor de query. O número de dimensões deve corresponder ao campo de índice.

limit

int

O número máximo de resultados a serem retornados.

numCandidates

int

O número de vizinhos mais próximos a serem considerados durante a pesquisa. Obrigatório apenas para vectorSearch() . Este valor deve ser maior ou igual a limit.

Ambos os métodos retornam uma instância VectorSearchOperator. Você pode encadear os seguintes métodos na instância retornada:

Método
Descrição

filter()

Aplica um SearchOperator como pré-filtro antes da pesquisa vetorial. Você pode passar qualquer operador do MongoDB Search, incluindo operadores que usam campos de texto analisados.

score()

Aplicar um modificador de pontuação aos resultados da pesquisa vetorial.

O exemplo a seguir usa o método vectorSearch() para realizar uma pesquisa ANN no campo plot_embedding da coleção movies. O exemplo aplica um operador text como um pré-filtro lexical no campo genres.

List<Double> queryVector = List.of(
-0.014, -0.055, 0.047, -0.041, 0.027);
Bson searchStage = Aggregates.search(
SearchOperator.vectorSearch(
fieldPath("plot_embedding"),
queryVector,
10,
20
).filter(SearchOperator.text(
fieldPath("genres"), "Drama")));
collection.aggregate(List.of(searchStage))
.forEach(result -> System.out.println(result));

O exemplo a seguir usa o método vectorSearchExact() para realizar uma pesquisa ENN no campo plot_embedding da coleção movies:

List<Double> queryVector = List.of(
-0.014, -0.055, 0.047, -0.041, 0.027);
Bson searchStage = Aggregates.search(
SearchOperator.vectorSearchExact(
fieldPath("plot_embedding"),
queryVector,
5));
collection.aggregate(List.of(searchStage))
.forEach(result -> System.out.println(result));

Para aprender mais sobre o MongoDB pesquisa, consulte MongoDB pesquisa na documentação do Atlas.

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