Visão geral
Neste guia, você pode aprender como query um índice do Atlas Search e usar a funcionalidade avançada de pesquisa de texto completo em seus aplicativos PyMongo. Você pode query um índice de pesquisa utilizando uma fase do pipeline de agregação $search
.
Para saber mais sobre a fase de pipeline $search
, consulte o guia $search no manual do MongoDB Server.
Observação
Disponível apenas no Atlas para MongoDB v4.2 e posterior
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 que são abrangidos por um índice do Atlas Search. Para saber mais sobre a configuração necessária e a funcionalidade desse operador, consulte a documentação do Atlas Search.
Dados de amostra
Os exemplos neste guia usam a sample_mflix.movies
coleção dos conjuntos de dados de amostra do Atlas . Para saber como criar um cluster do MongoDB Atlas gratuito e carregar os conjuntos de dados de amostra, consulte Começar a usar o PyMongo.
criar um índice do atlas search
Antes de executar uma pesquisa em uma coleção do Atlas, primeiro você deve criar um índice do Atlas Search na coleção. Um índice do Atlas Search é uma estrutura de dados que categoriza os dados em um formato pesquisável. Para saber como criar um índice do Atlas Search, consulte Índices do Atlas Search e do Vector Search.
Pesquisar seus dados
Para usar a fase do pipeline de agregação $search
, você deve especificar um operador de query do Atlas Search que indique o tipo de query que deseja executar. Você também pode especificar opcionalmente um coletor que agrupe os resultados por valores ou faixas. Para ver uma tabela de todos os operadores e coletores disponíveis com o Atlas Search, consulte Usar operadores e coletores em queries do Atlas Search.
O exemplo a seguir usa o operador compound
para combinar vários operadores em uma única consulta. Para saber mais sobre o operador compound
, consulte o guia do operador Composto na documentação do MongoDB Atlas.
A query tem os seguintes critérios de pesquisa:
O campo
genres
não deve conterComedy
.O campo
title
deve conter a stringNew York
.
A query também inclui as seguintes fases:
$limit
para limitar a saída a 10 resultados.$project
, para excluir todos os campos, excetotitle
e adicionar um campo chamadoscore
.
client = pymongo.MongoClient("<connection-string>") result = client["sample_mflix"]["movies"].aggregate([ { "$search": { "index": "pymongoindex", "compound": { "mustNot": [ { "text": { "query": [ "Comedy" ], "path": "genres" } } ], "must": [ { "text": { "query": [ "New York" ], "path": "title" } } ], } } }, { "$limit": 10 }, { "$project": { "_id": 0, "title": 1, "score": { "$meta": "searchScore" } } } ]) for i in result: print(i)
{'title': 'New York, New York', 'score': 6.786379814147949} {'title': 'New York', 'score': 6.258603096008301} {'title': 'New York Doll', 'score': 5.381444931030273} {'title': 'Escape from New York', 'score': 4.719935417175293} {'title': 'Autumn in New York', 'score': 4.719935417175293} {'title': 'Sleepless in New York', 'score': 4.719935417175293} {'title': 'Gangs of New York', 'score': 4.719935417175293} {'title': 'Sherlock Holmes in New York', 'score': 4.203253746032715} {'title': 'New York: A Documentary Film', 'score': 4.203253746032715} {'title': 'An Englishman in New York', 'score': 4.203253746032715}
Informações adicionais
Para saber mais sobre os operadores disponíveis do Atlas Search, consulte o guia Operadores e coletores na documentação do MongoDB Atlas.
Para mais informações sobre o Atlas Search e para ver mais exemplos de consultas, veja a documentação do Atlas Search.
Se você quiser realizar pesquisas vetoriais nos seus dados armazenados no Atlas, deve usar o Atlas Vector Search. Para aprender mais sobre o Atlas Vector Search, consulte a documentação do Atlas Vector Search.