Visão geral
Neste guia, você aprenderá a executar uma query de um índice do MongoDB Search e a usar a funcionalidade avançada de pesquisa de texto completo em seus aplicativos do PyMongo. Você pode fazer query de um índice de pesquisa usando um estágio de 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 $search operador de pipeline de agregação está disponível somente para coleções hospedadas em clusters do MongoDB Atlas 4.2 que executam o MongoDB v ou posterior que são abrangidos por um índice do MongoDB Search. Para saber mais sobre a configuração necessária e a funcionalidade desse operador, consulte a documentação do MongoDB 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.
Crie um índice de pesquisa do MongoDB
Antes de executar uma pesquisa em uma coleção do Atlas , primeiro você deve criar um índice do MongoDB Search na coleção. Um índice do MongoDB Search é uma estrutura de dados que categoriza os dados em um formato pesquisável. Para saber como criar um índice do MongoDB Search, consulte Índices do MongoDB Search e Vector Search .
Pesquisar seus dados
Para usar o $search agregação pipeline stage, você deve especificar um operador de query do MongoDB Search que indique o tipo de query que você deseja executar. Você também pode, opcionalmente, especificar um coletor que agrupa resultados por valores ou faixas. Para visualizar uma tabela de todos os operadores e coletores disponíveis com o MongoDB Search, consulte Usar operadores e coletores em queries do MongoDB 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
genresnão deve conterComedy.O campo
titledeve conter a stringNew York.
A query também inclui as seguintes fases:
$limitpara limitar a saída a 10 resultados.$project, para excluir todos os campos, excetotitlee 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 MongoDB Search, consulte o guia Operadores e coletores na documentação do MongoDB Atlas .
Para obter mais informações sobre o MongoDB Search e para exibir mais exemplos de query, consulte a documentação do MongoDB Search.
Se você deseja realizar pesquisas de vetor em seus dados armazenados no Atlas, deve usar o MongoDB Vector Search . Para saber mais sobre a Vector Search do MongoDB , consulte a documentação da Vector Search do MongoDB .