Atualize queries $text com o Atlas Search para melhorar o desempenho da pesquisa
Se suas queries dependerem muito do estágio do pipeline de agregação $text
, você poderá modificá-las para usar $search
para melhorar a flexibilidade e o desempenho dessas queries.
Vantagens dos recursos do Atlas Search
O estágio de aggregation $search
fornece os seguintes recursos que não estão disponíveis por meio do operador $text
, estão disponíveis, mas têm menos desempenho, ou estão disponíveis somente com um trabalho significativo de implementação do usuário:
Pesquisar sem distinção entre maiúsculas e minúsculas e diacríticos
Realcedo texto do resultado
Preenchimento automático de caracteres e palavras com diferentes estratégias de tokenização
Filtragem de 10 ou mais strings com o operador composto
Pontuação e classificação de relevância personalizáveis
Índice composto único em arrays
pesquisar de sinônimos
Bucketing para navegação facetada
Query de frase
Exemplos
Criar os índices
Os exemplos nas seções seguintes utilizam queries na collection sample_mflix.movies
nos dados de amostra para ilustrar as melhorias na flexibilidade e no desempenho que o Atlas Search oferece ao longo do $text
. Você pode executar as queries de ambos os exemplos utilizando os seguintes índices:
Text Index | Índice de Pesquisa do Atlas | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Qualquer definição de índice indexará os campos genres
e plot
como texto, e o campo year
como numérico. Para obter instruções sobre como criar índices $text
, consulte Criar índice de texto. Para instruções sobre como criar índices de Atlas Search, consulte Criar um Índice de Atlas Search.
Melhore a flexibilidade das query de texto completo com o Atlas Search
Você pode atualizar suas queries baseadas em $text
para usar $search
para maior flexibilidade e conveniência. Neste exemplo, você consultará a coleção sample_mflix.movies
nos dados de amostra para recuperar entradas com a palavra "poeta" no campo plot
, classificada em ordem crescente por ano.
As definições de índice dispostas na seção anterior ilustram uma das melhorias de flexibilidade do $search
: para criar o índice $text
no sample_mflix.movies
, você deve primeiro excluir qualquer índice de texto existente nos dados de amostra, como o MongoDB suporta apenas um único índice de texto por collection.
Por outro lado, você pode criar múltiplos índice de pesquisa do Atlas Search para uma única collection, permitindo que sua aplicação aproveite query de texto completo distintas em paralelo.
As query a seguir retornam os cinco filmes mais recentes com "poeta" no campo plot
, mostrando seus títulos, gêneros, tramas e anos de lançamento.
Regex Index | Índice de Pesquisa do Atlas | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Ambas as query retornam os seguintes resultados:
{ plot: `It's the story of the murder of a poet, a man, a great film director: Pier Paolo Pasolini. The story begin with the arrest of "Pelosi", a young man then accused of the murder of the poet. ...`, genres: [ 'Crime', 'Drama' ], title: 'Who Killed Pasolini?', year: 1995 }, { plot: 'Friendship and betrayal between two poets during the French Revolution.', genres: [ 'Biography', 'Drama' ], title: 'Pandaemonium', year: 2000 }, { year: 2003, plot: 'Story of the relationship between the poets Ted Hughes and Sylvia Plath.', genres: [ 'Biography', 'Drama', 'Romance' ], title: 'Sylvia' }, { year: 2003, plot: 'Story of the relationship between the poets Ted Hughes and Sylvia Plath.', genres: [ 'Biography', 'Drama', 'Romance' ], title: 'Sylvia' }, { plot: 'A love-struck Italian poet is stuck in Iraq at the onset of an American invasion.', genres: [ 'Comedy', 'Drama', 'Romance' ], title: 'The Tiger and the Snow', year: 2005 }
Exclusivo do Atlas Search, você pode adicionar destaques aos resultados, exibindo as correspondências nos contextos em que foram encontrados. Para fazer isso, substitua a query de pesquisa do Atlas Search acima pelo seguinte:
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "path": "plot", 6 "query": "poet" 7 }, 8 "highlight": { 9 "path": "plot" 10 } 11 } 12 }, 13 { 14 "$limit": 1 15 }, 16 { 17 "$project": { 18 "_id": 0, 19 "title": 1, 20 "genres": 1, 21 "plot": 1, 22 "year": 1, 23 "highlights": { "$meta": "searchHighlights" } 24 } 25 } 26 ])
Os resultados da query acima incluem o campo highlights
, que contém o contexto em que todas as correspondências ocorreram e as pontuações de relevância para cada uma. Por exemplo, o seguinte mostra o campo highlights
para o primeiro documento nos resultados do $search
.
{ plot: `It's the story of the murder of a poet, a man, a great film director: Pier Paolo Pasolini. The story begin with the arrest of "Pelosi", a young man then accused of the murder of the poet. ...`, genres: [ 'Crime', 'Drama' ], title: 'Who Killed Pasolini?', year: 1995, highlights: [ { score: 1.0902210474014282, path: 'plot', texts: [ { value: "It's the story of the murder of a ", type: 'text' }, { value: 'poet', type: 'hit' }, { value: ', a man, a great film director: Pier Paolo Pasolini. ', type: 'text' } ] }, { score: 1.0202842950820923, path: 'plot', texts: [ { value: 'The story begin with the arrest of "Pelosi", a young man then accused of the murder of the ', type: 'text' }, { value: 'poet', type: 'hit' }, { value: '. ...', type: 'text' } ] } ] }
Melhorar o desempenho das consultas com o Atlas Search
Além de maior flexibilidade e conveniência, o Atlas Search oferece vantagens significativas de desempenho em relação às queries $text
análogas. Considere uma query na collection sample_mflix.movies
para recuperar filmes lançados entre 2000 e 2010, no gênero de comedia, com "poeta" no campo plot
.
Execute a seguinte query:
Text Index | Índice de Pesquisa do Atlas | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
Ambas as queries retornarão os três documentos a seguir.
{ year: 2000, plot: 'A film poem inspired by the Peruvian poet Cèsar Vallejo. A story about our need for love, our confusion, greatness and smallness and, most of all, our vulnerability. It is a story with many...', genres: [ 'Comedy', 'Drama' ], title: 'Songs from the Second Floor' }, { plot: 'When his mother, who has sheltered him his entire 40 years, dies, Elling, a sensitive, would-be poet, is sent to live in a state institution. There he meets Kjell Bjarne, a gentle giant and...', genres: [ 'Comedy', 'Drama' ], title: 'Elling', year: 2001 }, { plot: 'Heart-broken after several affairs, a woman finds herself torn between a Poet and a TV Host.', genres: [ 'Comedy', 'Romance', 'Drama' ], title: 'Easy', year: 2003 }
Embora o $text
seja adequado para pesquisas simples e restritas como essa, à medida que o tamanho dos conjuntos de dados e a largura das consultas aumentam, as vantagens de desempenho do $search
melhorarão significativamente a capacidade de resposta dos seus aplicativos. Recomendamos que você use uma query do Atlas Search por meio do estágio do pipeline de agregação $search .
Saiba mais
Para mais informações sobre queries de pesquisa do Atlas, consulte Crie e execute queries de pesquisa do Atlas.
A Universidade de MongoDB oferece um curso gratuito sobre como otimizar o desempenho do MongoDB. Para saber mais, consulte Monitoramento e insights.