Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ /

Como Executar queries de Pesquisa do Atlas de Correspondência Parcial

Nesta página

  • Crie o Índice Atlas Search
  • Executar uma consulta de correspondência parcial com distinção entre maiúsculas e minúsculas

Este tutorial descreve como criar um índice na coleção sample_mflix.movies e executar queries de string parcial no campo plot. Para retornar correspondências para queries de strings parciais, você pode usar um dos seguintes operadores:

  • O operador autocomplete , que permite pesquisar os campos especificados em busca de uma palavra ou frase que contém a sequência de caracteres determinados em sua query.

  • O operador de frase, que permite pesquisar nos campos especificados documentos que contenham os termos na cadeia de caracteres de consulta na distância especificada entre os termos.

  • O operador regex, que permite que você pesquise cadeias de caracteres nos campos especificados usando expressões regulares.

  • O operador wildcard, que permite a você pesquisar os campos especificados utilizando caracteres especiais em sua query para corresponder a qualquer caractere.

Este tutorial orienta você pelas seguintes etapas:

  1. Defina um índice do Atlas Search no plot campo na coleção sample_mflix.movies.

  2. Execute a query da Atlas Search para uma string parcial no campo plot na coleção sample_mflix.movies usando operadores de autocomplete, phrase, regex e wildcard.

Antes de começar, certifique-se de que seu Atlas cluster atenda aos requisitos descritos nos Pré-requisitos.

Para criar um índice do Atlas Search, você deve ter acesso do Project Data Access Admin ou superior ao projeto.

Nesta seção, você criará um índice de Pesquisa do Atlas no campo plot na coleção sample_mflix.movies para executar queries de correspondência parcial em relação a estes campos.

1
  1. Se ainda não estiver exibido, selecione a organização que contém o projeto desejado no menu Organizations na barra de navegação.

  2. Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.

  3. Se a página Clusters ainda não estiver exibida, clique em Database na barra lateral.

2

Você pode acessar a página Atlas Search na barra lateral, o Data Explorer ou a página de detalhes do cluster.

  1. Na barra lateral, clique em Atlas Search sob o título Services .

  2. Na lista suspensa Select data source , selecione seu cluster e clique em Go to Atlas Search.

  1. Clique no botão Browse Collections para o seu cluster.

  2. Expanda o banco de dados e selecione a coleção.

  3. Clique na aba Search Indexes da collection.

  1. Clique no nome do cluster.

  2. Clique na aba Atlas Search.

3
4
  • Para uma experiência abada, selecione a Pesquisa Atlas Visual Editor.

  • Para editar a definição de índice bruto, selecione a Pesquisa Atlas JSON Editor.

5
  1. No campo Index Name, digite partial-match-tutorial.

    Observação

    Se você nomear seu índice como default, não precisará especificar um parâmetro index ao usar o estágio do pipeline $search. Caso contrário, você deve especificar o nome do índice utilizando o parâmetro index.

  2. Na seção Database and Collection, localize o banco de dados sample_mflix e selecione a coleção movies.

6

Você pode usar o Visual Editor do Atlas Search ou o JSON Editor do Atlas Search na interface de usuário do Atlas para criar o índice.

  1. Clique em Next.

  2. Clique em Refine Your Index.

  3. Na seção Index Configurations, alterne para desabilitar Dynamic Mapping.

  4. Na seção Field Mappings, clique em

  5. Add Field para exibir a janela Add Field Mapping .

  6. Selecione plot no menu suspenso Field Name.

  7. Clique no menu suspenso Data Type para especificar o tipo de campo e as configurações do operador que você deseja utilizar para executar a consulta.

    1. Selecione Autocomplete no menu suspenso para executar a consulta utilizando o operador de preenchimento automático.

    2. Modifique as configurações padrão para o tipo de dados, conforme mostrado abaixo:

      Nome do campo UI
      Configuração
      Max Grams
      15
      Min Grams
      2
      Tokenization
      edgeGram
      Fold Diacritics
      true

      Para saber mais sobre essas configurações, consulte Como indexar campos para preenchimento automático.

    1. Selecione String no menu suspenso para executar a query usando o operador de frase.

    2. Modifique as configurações padrão para o tipo de dados, conforme mostrado abaixo:

      Nome do campo UI
      Configuração
      Index Analyzer
      lucene.standard
      Search Analyzer
      lucene.standard
      Index Options
      offsets
      Store
      true
      Ignore Above
      none
      Norms
      include

      Para saber mais sobre essas configurações, consulte Como indexar campos de string.

    1. Selecione String no menu suspenso para executar a consulta utilizando o operador regex .

    2. Modifique as configurações padrão para o tipo de dados, conforme mostrado abaixo:

      Nome do campo UI
      Configuração
      Index Analyzer
      lucene.keyword
      Search Analyzer
      lucene.keyword
      Index Options
      offsets
      Store
      true
      Ignore Above
      none
      Norms
      include

      Para saber mais sobre essas configurações, consulte Como indexar campos de string.

    1. Selecione String no menu suspenso para executar a query usando o operador curinga.

    2. Modifique as configurações padrão para o tipo de dados, conforme mostrado abaixo:

      Nome do campo UI
      Configuração
      Index Analyzer
      lucene.keyword
      Search Analyzer
      lucene.keyword
      Index Options
      offsets
      Store
      true
      Ignore Above
      none
      Norms
      include

      Para saber mais sobre essas configurações, consulte Como indexar campos de string.

  8. Clique em Add para adicionar o campo à lista na seção Field Mappings.

  9. Clique em Save Changes.

  1. Substitua a definição de índice padrão pela seguinte definição de índice de exemplo para o operador que pretende utilizar para executar a consulta.

    {
    "mappings": {
    "dynamic": false,
    "fields": {
    "plot": [
    {
    "type": "autocomplete",
    "tokenization": "edgeGram",
    "minGrams": 2,
    "maxGrams": 15,
    "foldDiacritics": true
    }
    ]
    }
    }
    }
    {
    "mappings": {
    "fields": {
    "plot": {
    "analyzer": "lucene.standard",
    "type": "string"
    }
    }
    }
    }
    {
    "mappings": {
    "fields": {
    "plot": {
    "analyzer": "lucene.keyword",
    "type": "string"
    }
    }
    }
    }
    {
    "mappings": {
    "fields": {
    "plot": {
    "analyzer": "lucene.keyword",
    "type": "string"
    }
    }
    }
    }
  2. Clique em Next.

7
8

Uma janela modal é exibida para que você saiba que seu índice está construindo. Clique no botão Close.

9

O índice deve levar cerca de um minuto para ser criado. Enquanto está se formando, a coluna Status mostra Build in Progress. Quando terminar de se formar, a coluna Status mostrará Active.


➤ Use o menu suspenso Selecione seu idioma nesta página para definir o idioma dos exemplos nesta seção.


Você pode usar os operadores de preenchimento automático, frase, regex e curinga para executar uma query de correspondência parcial com distinção entre maiúsculas e minúsculas. Este tutorial utiliza esses operadores para pesquisar filmes cuja trama contém a string parcial especificada.

Nesta seção, você conectará ao seu agrupamento do Atlas e executará a query de amostra utilizando o operador no campo plot na coleção sample_mflix.movies.

1
  1. Se ainda não estiver exibido, selecione a organização que contém o projeto desejado no menu Organizations na barra de navegação.

  2. Se ainda não estiver exibido, selecione o projeto desejado no menu Projects na barra de navegação.

  3. Se a página Clusters ainda não estiver exibida, clique em Database na barra lateral.

2

Você pode acessar a página Atlas Search na barra lateral, o Data Explorer ou a página de detalhes do cluster.

  1. Na barra lateral, clique em Atlas Search sob o título Services .

  2. Na lista suspensa Select data source , selecione seu cluster e clique em Go to Atlas Search.

  1. Clique no botão Browse Collections para o seu cluster.

  2. Expanda o banco de dados e selecione a coleção.

  3. Clique na aba Search Indexes da collection.

  1. Clique no nome do cluster.

  2. Clique na aba Atlas Search.

3

Clique no botão Query à direita do índice para consultar.

4

Clique em Edit Query para visualizar uma amostra de sintaxe de consulta padrão no formato JSON .

5

A query seguinte usa o operador para consultar o campo plot da collection sample_mflix.movies.

Copie e cole a seguinte consulta no Query Editor e, em seguida, clique no botão Search no Query Editor.

A consulta permite o seguinte para corresponder a string de consulta new purchase a uma palavra no campo:

  • Permite que as palavras new e purchase apareçam em qualquer lugar no campo plot.

  • Permite que a variação de dois caracteres na string da query corresponda a query a uma palavra no campo, mas não permite que o primeiro caractere da string de consulta seja alterado.

  • Permite considerar até duzentos e cinquenta e seis termos semelhantes.

1[
2 {
3 "$search": {
4 "index": "partial-match-tutorial",
5 "autocomplete": {
6 "path": "plot",
7 "query": "new purchase",
8 "tokenOrder": "any",
9 "fuzzy": {
10 "maxEdits": 2,
11 "prefixLength": 1,
12 "maxExpansions": 256
13 }
14 },
15 "highlight": {
16 "path": "plot"
17 }
18 }
19 }
20]
SCORE: 3 _id: "573a13a4f29313caabd112f0"
A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune.
Matching fields: plot
SCORE: 3 _id: "573a13d1f29313caabd8e209"
A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.
Matching fields: plot
SCORE: 2 _id: "573a13bef29313caabd5b62d"
Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must
Matching fields: plot
SCORE: 2 _id: "573a13b3f29313caabd3c91e"
He is "purchased" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor.
Matching fields: plot
SCORE: 2 _id: "573a1398f29313caabceb931"
A country boy becomes the head of a gang through the purchase of some lucky roses from an old lady.
Matching fields: plot, plot
SCORE: 1 _id: "573a13a7f29313caabd1b5ab"
An illegal Nigerian immigrant discovers the unpalatable side of London life.
Matching fields: plot
SCORE: 1 _id: "573a13a7f29313caabd1b5c0"
A young dropout falls in love with a nightclub dancer...
Matching fields: plot
SCORE: 1 _id: "573a13a7f29313caabd1b62f"
In 1990, to protect his fragile mother from a fatal shock after a long coma, a young man must keep her from learning that her beloved nation of East Germany as she knew it has disappeared.
Matching fields: plot
SCORE: 1 _id: "573a13a7f29313caabd1b6af"
Gadget once again has to fight his arch nemesis, Claw.
Matching fields: plot

A query especifica a string de query new purpose com uma distância posicional de até 5 entre new e purpose.

1[
2 {
3 "$search": {
4 "index": "partial-match-tutorial",
5 "phrase": {
6 "path": "plot",
7 "query": "new purpose",
8 "slop": 5
9 },
10 "highlight": {
11 "path": "plot"
12 }
13 }
14 }
15]
SCORE: 3.7209534645080566 _id: "573a13b1f29313caabd37ae6"
The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.
Matching fields: plot
SCORE: 1.1507558822631836 _id: "573a13bdf29313caabd58a26"
But without a hero, he loses all purpose and must find new meaning to his life.
Matching fields: plot
SCORE: 1.0041160583496094 _id: "573a1396f29313caabce5197"
An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid.
Matching fields: plot

A query usa a expressão regular (.*) para corresponder a qualquer número de caracteres com a string de query parcial.

1[
2 {
3 "$search": {
4 "index": "partial-match-tutorial",
5 "regex": {
6 "path": "plot",
7 "query": "(.*)new(.*) pur(.*)"
8 }
9 }
10 }
11]
SCORE: 1 _id: "573a1397f29313caabce77d9"
fullplot: "After the Rebel base on the icy planet Hoth is taken over by the empir…"
imdb: Object
year: 1980
SCORE: 1 _id: "573a1398f29313caabceb893"
plot: "The new owner of the Cleveland Indians puts together a purposely horri…"
genres: Array
runtime: 107
SCORE: 1 _id: "573a13b1f29313caabd37ae6"
plot: "The true story of Richard Pimentel, a brilliant public speaker with a …"
genres: Array
runtime: 94
SCORE: 1 _id: "573a13d1f29313caabd8e209"
fullplot: "Theodore is a lonely man in the final stages of his divorce. When he's…"
imdb: Object
year: 2013
SCORE: 1 _id: "573a13dcf29313caabdb107a"
plot: "An adrenaline junkie walks away from a whirlwind romance and embraces …"
genres: Array
runtime: 146

A query usa * na string de query para corresponder 0 ou mais caracteres antes e depois das palavras especificadas na string de query parcial.

1[
2 {
3 "$search": {
4 "index": "partial-match-tutorial",
5 "wildcard": {
6 "path": "plot",
7 "query": "*new* pur*"
8 }
9 }
10 }
11]
SCORE: 1 _id: "573a1397f29313caabce77d9"
fullplot: "After the Rebel base on the icy planet Hoth is taken over by the empir…"
imdb: Object
year: 1980
SCORE: 1 _id: "573a1398f29313caabceb893"
plot: "The new owner of the Cleveland Indians puts together a purposely horri…"
genres: Array
runtime: 107
SCORE: 1 _id: "573a13b1f29313caabd37ae6"
plot: "The true story of Richard Pimentel, a brilliant public speaker with a …"
genres: Array
runtime: 94
SCORE: 1 _id: "573a13d1f29313caabd8e209"
fullplot: "Theodore is a lonely man in the final stages of his divorce. When he's…"
imdb: Object
year: 2013
SCORE: 1 _id: "573a13dcf29313caabdb107a"
plot: "An adrenaline junkie walks away from a whirlwind romance and embraces …"
genres: Array
runtime: 146
6

O Search Tester pode não exibir todos os campos nos documentos que ele retorna. Para exibir todos os campos, incluindo o campo que você especifica no caminho da consulta, expanda o documento nos resultados.

1

Abra o mongosh em uma janela do terminal e conecte ao seu cluster. Para obter instruções detalhadas sobre a conexão, consulte Conectar via mongosh.

2

Execute o seguinte comando no prompt mongosh:

use sample_mflix
3

A consulta seguinte usa o operador para consultar o campo plot da coleção sample_mflix.movies. A consulta inclui um:

  • $limit estágio para limitar a saída a 5 resultados

  • Estágio $project para excluir todos os campos, exceto title e plot

A consulta permite o seguinte para corresponder a string de consulta new purchase a uma palavra no campo:

  • Permite que as palavras new e purchase apareçam em qualquer lugar no campo plot.

  • Permite que a variação de dois caracteres na string da query corresponda a query a uma palavra no campo, mas não permite que o primeiro caractere da string de consulta seja alterado.

  • Permite considerar até duzentos e cinquenta e seis termos semelhantes.

1db.movies.aggregate([
2 {
3 "$search": {
4 "index": "partial-match-tutorial",
5 "autocomplete": {
6 "path": "plot",
7 "query": "new purchase",
8 "tokenOrder": "any",
9 "fuzzy": {
10 "maxEdits": 2,
11 "prefixLength": 1,
12 "maxExpansions": 256
13 }
14 },
15 "highlight": {
16 "path": "plot"
17 }
18 }
19 },
20 {
21 "$limit": 5
22 },
23 {
24 "$project": {
25 "_id": 0,
26 "title": 1,
27 "plot": 1,
28 "highlights": { "$meta": "searchHighlights" }
29 }
30 }
31])
[
{
plot: "A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune.",
title: 'Panic Room',
highlights: [
{
score: 4.364492893218994,
path: 'plot',
texts: [
{
value: 'A divorced woman and her diabetic daughter take refuge in their ',
type: 'text'
},
{ value: "newly-purchased house's safe", type: 'hit' },
{
value: ' room, when three men break-in, searching for a missing fortune.',
type: 'text'
}
]
}
]
},
{
plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
title: 'Her',
highlights: [
{
score: 4.198050022125244,
path: 'plot',
texts: [
{
value: 'A lonely writer develops an unlikely relationship with his ',
type: 'text'
},
{ value: 'newly purchased operating system', type: 'hit' },
{
value: " that's designed to meet his every ",
type: 'text'
},
{ value: 'need', type: 'hit' },
{ value: '.', type: 'text' }
]
}
]
},
{
plot: "Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must therefore go on the run before said ticker is repossessed.",
title: 'Repo Men',
highlights: [
{
score: 2.6448397636413574,
path: 'plot',
texts: [
{ value: 'Set in the ', type: 'text' },
{ value: 'near future when', type: 'hit' },
{ value: ' artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has ', type: 'text' },
{ value: 'purchased. He must', type: 'hit' }
]
}
]
},
{
plot: 'A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding.',
title: 'Punch-Drunk Love',
highlights: [
{
score: 1.2451990842819214,
path: 'plot',
texts: [
{ value: 'A psychologically troubled ', type: 'text' },
{ value: 'novelty supplier is', type: 'hit' },
{ value: ' ', type: 'text' },
{ value: 'nudged towards a', type: 'hit' },
{
value: ' romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and ',
type: 'text'
},
{ value: 'purchasing stunning amounts', type: 'hit' },
{ value: ' of pudding.', type: 'text' }
]
}
]
},
{
plot: 'Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is "purchased" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor.',
title: 'The Condemned',
highlights: [
{
score: 2.94378924369812,
path: 'plot',
texts: [
{ value: 'He is "', type: 'text' },
{ value: 'purchased" by a', type: 'hit' },
{
value: ' wealthy television producer and taken to a desolate island where he must fight to the death against ',
type: 'text'
},
{ value: 'nine other condemned', type: 'hit' },
{
value: ' killers from all corners of the world, with freedom going to the sole survivor.',
type: 'text'
}
]
}
]
}
]

A query especifica a string de query new purpose com uma distância posicional de até 5 entre new e purpose.

1db.movies.aggregate([
2 {
3 "$search": {
4 "index": "partial-match-tutorial",
5 "phrase": {
6 "path": "plot",
7 "query": "new purpose",
8 "slop": 5
9 },
10 "highlight": {
11 "path": "plot"
12 }
13 }
14 },
15 {
16 "$limit": 5
17 },
18 {
19 "$project": {
20 "_id": 0,
21 "plot": 1,
22 "title": 1,
23 "highlights": { "$meta": "searchHighlights" }
24 }
25 }
26])
[
{
plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.',
title: 'Music Within',
highlights: [
{
score: 1.9394469261169434,
path: 'plot',
texts: [
{ value: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a ', type: 'text' },
{ value: 'new', type: 'hit' },
{ value: ' ', type: 'text' },
{ value: 'purpose', type: 'hit' },
{ value: ' in his landmark efforts on the behalf of Americans with disabilities.', type: 'text' }
]
}
]
},
{
plot: 'The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life.',
title: 'Megamind',
highlights: [
{
score: 2.90376877784729,
path: 'plot',
texts: [
{ value: 'But without a hero, he loses all ', type: 'text' },
{ value: 'purpose', type: 'hit' },
{ value: ' and must find ', type: 'text' },
{ value: 'new', type: 'hit' },
{ value: ' meaning to his life.', type: 'text' }
]
}
]
},
{
plot: 'An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid.',
title: 'Pat Garrett & Billy the Kid',
highlights: [
{
score: 2.115748405456543,
path: 'plot',
texts: [
{ value: 'An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy ', type: 'text' },
{ value: 'New', type: 'hit' },
{ value: ' Mexico cattle barons--his sole ', type: 'text' },
{ value: 'purpose', type: 'hit' },
{ value: ' being to bring down his old friend Billy the Kid.', type: 'text' }
]
}
]
}
]

A query usa a expressão regular (.*) para corresponder a qualquer número de caracteres com a string de query parcial.

1db.movies.aggregate([
2 {
3 "$search": {
4 "index": "partial-match-tutorial",
5 "regex": {
6 "path": "plot",
7 "query": "(.*)new(.*) pur(.*)"
8 }
9 }
10 },
11 {
12 $limit: 5
13 },
14 {
15 $project: {
16 "_id": 0,
17 "plot": 1,
18 "title": 1
19 }
20 }
21])
[
{
plot: 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.',
title: 'Star Wars: Episode V - The Empire Strikes Back'
},
{
plot: "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.",
title: 'Major League'
},
{
plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.',
title: 'Music Within'
},
{
plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
title: 'Her'
},
{
plot: 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.',
title: 'Kick'
}
]

A query usa * na string de query para corresponder 0 ou mais caracteres antes e depois das palavras especificadas na string de query parcial.

1db.movies.aggregate([
2 {
3 "$search": {
4 "index": "partial-match-tutorial",
5 "wildcard": {
6 "path": "plot",
7 "query": "*new* pur*"
8 }
9 }
10 },
11 {
12 "$limit": 5
13 },
14 {
15 "$project": {
16 "_id": 0,
17 "plot": 1
18 }
19 }
20])
[
{
plot: 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.',
title: 'Star Wars: Episode V - The Empire Strikes Back'
},
{
plot: "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.",
title: 'Major League'
},
{
plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.',
title: 'Music Within'
},
{
plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
title: 'Her'
},
{
plot: 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.',
title: 'Kick'
}
]
1

Abra o MongoDB Compass e conecte-se ao cluster. Para obter instruções detalhadas sobre a conexão, consulte Conectar via Compass.

2

Na tela Database, clique no banco de dados sample_mflix e, em seguida, clique na coleção movies.

3

A consulta seguinte usa o operador para consultar o campo plot da coleção sample_mflix.movies. A consulta inclui um:

  • $limit estágio para limitar a saída a 5 resultados

  • Estágio $project para excluir todos os campos, exceto title e plot

Para executar esta consulta no MongoDB Compass:

  1. Clique na aba Aggregations.

  2. Clique em Select... e, em seguida, configure cada um dos seguintes estágios do pipeline, selecionando o estágio no menu suspenso e adicionando a consulta para esse estágio. Clique em Add Stage para adicionar estágios adicionais.

    A consulta permite o seguinte para corresponder a string de consulta new purchase a uma palavra no campo:

    • Permite que as palavras new e purchase apareçam em qualquer lugar no campo plot.

    • Permite que a variação de dois caracteres na string da query corresponda a query a uma palavra no campo, mas não permite que o primeiro caractere da string de consulta seja alterado.

    • Permite considerar até duzentos e cinquenta e seis termos semelhantes.

    estágio do pipeline
    Query
    $search
    {
    "index": "partial-match-tutorial",
    "autocomplete": {
    "path": "plot",
    "query": "new purchase",
    "tokenOrder": "any",
    "fuzzy": {
    "maxEdits": 2,
    "prefixLength": 1,
    "maxExpansions": 256
    }
    },
    "highlight": {
    "path": "plot"
    }
    }
    $limit
    5
    $project
    {
    "_id": 0,
    "title": 1,
    "plot": 1,
    "highlights": { "$meta": "searchHighlights" }
    }

    A query especifica a string de query new purpose com uma distância posicional de até 5 entre new e purpose.

    estágio do pipeline
    Query
    $search
    {
    "index": "partial-match-tutorial",
    "phrase": {
    "path": "plot",
    "query": "new purpose",
    "slop": 5
    },
    "highlight": {
    "path": "plot"
    }
    }
    $limit
    5
    $project
    {
    "_id": 0,
    "title": 1,
    "plot": 1,
    "highlights": { "$meta": "searchHighlights" }
    }

    A query usa a expressão regular (.*) para corresponder a qualquer número de caracteres com a string de query parcial.

    estágio do pipeline
    Query
    $search
    {
    "index": "partial-match-tutorial",
    "regex": {
    "path": "plot",
    "query": "(.*)new(.*) pur(.*)"
    }
    }
    $limit
    5
    $project
    {
    "_id": 0,
    "title": 1,
    "plot": 1
    }

    A query usa * na string de query para corresponder 0 ou mais caracteres antes e depois das palavras especificadas na string de query parcial.

    estágio do pipeline
    Query
    $search
    {
    "index": "partial-match-tutorial",
    "wildcard": {
    "path": "plot",
    "query": "*new* pur*"
    }
    }
    $limit
    5
    $project
    {
    "_id": 0,
    "title": 1,
    "plot": 1
    }

Se você habilitou o Auto Preview, o MongoDB Compass exibe os seguintes documentos ao lado da etapa de pipeline do $project:

1[
2 {
3 plot: "A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune.",
4 title: 'Panic Room',
5 highlights: [
6 {
7 score: 4.364492893218994,
8 path: 'plot',
9 texts: [
10 {
11 value: 'A divorced woman and her diabetic daughter take refuge in their ',
12 type: 'text'
13 },
14 { value: "newly-purchased house's safe", type: 'hit' },
15 {
16 value: ' room, when three men break-in, searching for a missing fortune.',
17 type: 'text'
18 }
19 ]
20 }
21 ]
22 },
23 {
24 plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
25 title: 'Her',
26 highlights: [
27 {
28 score: 4.198050022125244,
29 path: 'plot',
30 texts: [
31 {
32 value: 'A lonely writer develops an unlikely relationship with his ',
33 type: 'text'
34 },
35 { value: 'newly purchased operating system', type: 'hit' },
36 {
37 value: " that's designed to meet his every ",
38 type: 'text'
39 },
40 { value: 'need', type: 'hit' },
41 { value: '.', type: 'text' }
42 ]
43 }
44 ]
45 },
46 {
47 plot: "Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must therefore go on the run before said ticker is repossessed.",
48 title: 'Repo Men',
49 highlights: [
50 {
51 score: 2.6448397636413574,
52 path: 'plot',
53 texts: [
54 { value: 'Set in the ', type: 'text' },
55 { value: 'near future when', type: 'hit' },
56 { value: ' artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has ', type: 'text' },
57 { value: 'purchased. He must', type: 'hit' }
58 ]
59 }
60 ]
61 },
62 {
63 plot: 'A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding.',
64 title: 'Punch-Drunk Love',
65 highlights: [
66 {
67 score: 1.2451990842819214,
68 path: 'plot',
69 texts: [
70 { value: 'A psychologically troubled ', type: 'text' },
71 { value: 'novelty supplier is', type: 'hit' },
72 { value: ' ', type: 'text' },
73 { value: 'nudged towards a', type: 'hit' },
74 {
75 value: ' romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and ',
76 type: 'text'
77 },
78 { value: 'purchasing stunning amounts', type: 'hit' },
79 { value: ' of pudding.', type: 'text' }
80 ]
81 }
82 ]
83 },
84 {
85 plot: 'Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is "purchased" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor.',
86 title: 'The Condemned',
87 highlights: [
88 {
89 score: 2.94378924369812,
90 path: 'plot',
91 texts: [
92 { value: 'He is "', type: 'text' },
93 { value: 'purchased" by a', type: 'hit' },
94 {
95 value: ' wealthy television producer and taken to a desolate island where he must fight to the death against ',
96 type: 'text'
97 },
98 { value: 'nine other condemned', type: 'hit' },
99 {
100 value: ' killers from all corners of the world, with freedom going to the sole survivor.',
101 type: 'text'
102 }
103 ]
104 }
105 ]
106 }
107]
1[
2 {
3 plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.',
4 title: 'Music Within',
5 highlights: [
6 {
7 score: 1.9394469261169434,
8 path: 'plot',
9 texts: [
10 { value: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a ', type: 'text' },
11 { value: 'new', type: 'hit' },
12 { value: ' ', type: 'text' },
13 { value: 'purpose', type: 'hit' },
14 { value: ' in his landmark efforts on the behalf of Americans with disabilities.', type: 'text' }
15 ]
16 }
17 ]
18 },
19 {
20 plot: 'The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life.',
21 title: 'Megamind',
22 highlights: [
23 {
24 score: 2.90376877784729,
25 path: 'plot',
26 texts: [
27 { value: 'But without a hero, he loses all ', type: 'text' },
28 { value: 'purpose', type: 'hit' },
29 { value: ' and must find ', type: 'text' },
30 { value: 'new', type: 'hit' },
31 { value: ' meaning to his life.', type: 'text' }
32 ]
33 }
34 ]
35 },
36 {
37 plot: 'An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid.',
38 title: 'Pat Garrett & Billy the Kid',
39 highlights: [
40 {
41 score: 2.115748405456543,
42 path: 'plot',
43 texts: [
44 { value: 'An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy ', type: 'text' },
45 { value: 'New', type: 'hit' },
46 { value: ' Mexico cattle barons--his sole ', type: 'text' },
47 { value: 'purpose', type: 'hit' },
48 { value: ' being to bring down his old friend Billy the Kid.', type: 'text' }
49 ]
50 }
51 ]
52 }
53]
1[
2 {
3 plot: 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.',
4 title: 'Star Wars: Episode V - The Empire Strikes Back'
5 },
6 {
7 plot: "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.",
8 title: 'Major League'
9 },
10 {
11 plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.',
12 title: 'Music Within'
13 },
14 {
15 plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
16 title: 'Her'
17 },
18 {
19 plot: 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.',
20 title: 'Kick'
21 }
22]
1[
2 {
3 plot: 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.',
4 title: 'Star Wars: Episode V - The Empire Strikes Back'
5 },
6 {
7 plot: "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.",
8 title: 'Major League'
9 },
10 {
11 plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.',
12 title: 'Music Within'
13 },
14 {
15 plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
16 title: 'Her'
17 },
18 {
19 plot: 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.',
20 title: 'Kick'
21 }
22]
1
  1. Crie um novo diretório chamado partial-match-example e inicialize seu projeto com o comando dotnet new .

    mkdir partial-match-example
    cd partial-match-example
    dotnet new console
  2. Adicione o driver .NET/C# ao seu projeto como uma dependência.

    dotnet add package MongoDB.Driver
2
  1. Substitua o conteúdo do arquivo Program.cs pelo seguinte código.

    O exemplo de código executa as seguintes tarefas:

    • Importa pacotes e dependências do mongodb .

    • Estabelece uma ligação ao seu cluster Atlas.

    • Executa uma query que usa:

      • $search estágio para procurar um termo

      • $limit estágio para limitar a saída a 5 resultados

      • $project estágio para excluir todos os campos, exceto title
        e a plot
    • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

    A consulta permite o seguinte para corresponder a string de consulta new purchase a uma palavra no campo:

    • Permite que as palavras new e purchase apareçam em qualquer lugar no campo plot.

    • Permite que a variação de dois caracteres na string da query corresponda a query a uma palavra no campo, mas não permite que o primeiro caractere da string de consulta seja alterado.

    • Permite considerar até duzentos e cinquenta e seis termos semelhantes.

    1using MongoDB.Bson;
    2using MongoDB.Bson.Serialization.Attributes;
    3using MongoDB.Bson.Serialization.Conventions;
    4using MongoDB.Driver;
    5using MongoDB.Driver.Search;
    6
    7public class PartialAutocomplete
    8{
    9 private const string MongoConnectionString = "<connection-string>";
    10
    11 public static void Main(string[] args) {
    12 // allow automapping of the camelCase database fields to our MovieDocument
    13 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
    14 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
    15
    16 // connect to your Atlas cluster
    17 var mongoClient = new MongoClient(MongoConnectionString);
    18 var mflixDatabase = mongoClient.GetDatabase("sample_mflix");
    19 var moviesCollection = mflixDatabase.GetCollection<MovieDocument>("movies");
    20
    21 // define fuzzy options
    22 SearchFuzzyOptions fuzzyOptions = new SearchFuzzyOptions()
    23 {
    24 MaxEdits = 2,
    25 PrefixLength = 1,
    26 MaxExpansions = 256
    27 };
    28
    29 // define and run pipeline
    30 var results = moviesCollection.Aggregate()
    31 .Search(Builders<MovieDocument>.Search.Autocomplete(movie => movie.Plot, "new purchase", SearchAutocompleteTokenOrder.Any, fuzzy: fuzzyOptions), new SearchHighlightOptions<MovieDocument>(movie => movie.Plot),
    32 indexName: "partial-match-tutorial")
    33 .Project<MovieDocument>(Builders<MovieDocument>.Projection
    34 .Include(movie => movie.Plot)
    35 .Include(movie => movie.Title)
    36 .Exclude(movie => movie.Id)
    37 .MetaSearchHighlights("highlights"))
    38 .Limit(5)
    39 .ToList();
    40
    41 // print results
    42 foreach (var movie in results) {
    43 Console.WriteLine(movie.ToJson());
    44 }
    45 }
    46}
    47
    48[BsonIgnoreExtraElements]
    49public class MovieDocument {
    50 [BsonIgnoreIfDefault]
    51 public ObjectId Id { get; set; }
    52 public string Plot { get; set; }
    53 public string Title { get; set; }
    54 [BsonElement("highlights")]
    55 public List<SearchHighlight> Highlights { get; set; }
    56}

    A query especifica a string de query new purpose com uma distância posicional de até 5 entre new e purpose.

    1using MongoDB.Bson;
    2using MongoDB.Bson.Serialization.Attributes;
    3using MongoDB.Bson.Serialization.Conventions;
    4using MongoDB.Driver;
    5using MongoDB.Driver.Search;
    6
    7public class PartialPhrase
    8{
    9 private const string MongoConnectionString = "<connection-string>";
    10
    11 public static void Main(string[] args) {
    12 // allow automapping of the camelCase database fields to our MovieDocument
    13 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
    14 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
    15
    16 // connect to your Atlas cluster
    17 var mongoClient = new MongoClient(MongoConnectionString);
    18 var mflixDatabase = mongoClient.GetDatabase("sample_mflix");
    19 var moviesCollection = mflixDatabase.GetCollection<MovieDocument>("movies");
    20
    21 // define and run pipeline
    22 var results = moviesCollection.Aggregate()
    23 .Search(Builders<MovieDocument>.Search.Phrase(movie => movie.Plot, "new purpose", 5), new SearchHighlightOptions<MovieDocument>(movie => movie.Plot),
    24 indexName: "partial-match-tutorial")
    25 .Project<MovieDocument>(Builders<MovieDocument>.Projection
    26 .Include(movie => movie.Plot)
    27 .Include(movie => movie.Title)
    28 .Exclude(movie => movie.Id)
    29 .MetaSearchHighlights("highlights"))
    30 .Limit(5)
    31 .ToList();
    32
    33 // print results
    34 foreach (var movie in results) {
    35 Console.WriteLine(movie.ToJson());
    36 }
    37 }
    38}
    39
    40[BsonIgnoreExtraElements]
    41public class MovieDocument {
    42 [BsonIgnoreIfDefault]
    43 public ObjectId Id { get; set; }
    44 public string Plot { get; set; }
    45 public string Title { get; set; }
    46 [BsonElement("highlights")]
    47 public List<SearchHighlight> Highlights { get; set; }
    48}

    A query usa a expressão regular (.*) para corresponder a qualquer número de caracteres com a string de query parcial.

    1using MongoDB.Bson;
    2using MongoDB.Bson.Serialization.Attributes;
    3using MongoDB.Bson.Serialization.Conventions;
    4using MongoDB.Driver;
    5using MongoDB.Driver.Search;
    6
    7public class PartialRegex
    8{
    9 private const string MongoConnectionString = "<connection-string>";
    10
    11 public static void Main(string[] args) {
    12 // allow automapping of the camelCase database fields to our MovieDocument
    13 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
    14 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
    15
    16 // connect to your Atlas cluster
    17 var mongoClient = new MongoClient(MongoConnectionString);
    18 var mflixDatabase = mongoClient.GetDatabase("sample_mflix");
    19 var moviesCollection = mflixDatabase.GetCollection<MovieDocument>("movies");
    20
    21 // define and run pipeline
    22 var results = moviesCollection.Aggregate()
    23 .Search(Builders<MovieDocument>.Search.Regex(movie => movie.Plot, "(.*)new(.*) pur(.*)"),
    24 indexName: "partial-match-tutorial")
    25 .Project<MovieDocument>(Builders<MovieDocument>.Projection
    26 .Include(movie => movie.Plot)
    27 .Include(movie => movie.Title)
    28 .Exclude(movie => movie.Id))
    29 .Limit(5)
    30 .ToList();
    31
    32 // print results
    33 foreach (var movie in results) {
    34 Console.WriteLine(movie.ToJson());
    35 }
    36 }
    37}
    38
    39[BsonIgnoreExtraElements]
    40public class MovieDocument {
    41 [BsonIgnoreIfDefault]
    42 public ObjectId Id { get; set; }
    43 public string Plot { get; set; }
    44 public string Title { get; set; }
    45}

    A query usa * na string de query para corresponder 0 ou mais caracteres antes e depois das palavras especificadas na string de query parcial.

    1using MongoDB.Bson;
    2using MongoDB.Bson.Serialization.Attributes;
    3using MongoDB.Bson.Serialization.Conventions;
    4using MongoDB.Driver;
    5using MongoDB.Driver.Search;
    6
    7public class PartialWildcard
    8{
    9 private const string MongoConnectionString = "<connection-string>";
    10
    11 public static void Main(string[] args) {
    12 // allow automapping of the camelCase database fields to our MovieDocument
    13 var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
    14 ConventionRegistry.Register("CamelCase", camelCaseConvention, type => true);
    15
    16 // connect to your Atlas cluster
    17 var mongoClient = new MongoClient(MongoConnectionString);
    18 var mflixDatabase = mongoClient.GetDatabase("sample_mflix");
    19 var moviesCollection = mflixDatabase.GetCollection<MovieDocument>("movies");
    20
    21 // define and run pipeline
    22 var results = moviesCollection.Aggregate()
    23 .Search(Builders<MovieDocument>.Search.Wildcard(movie => movie.Plot, "*new* pur*"),
    24 indexName: "partial-match-tutorial")
    25 .Project<MovieDocument>(Builders<MovieDocument>.Projection
    26 .Include(movie => movie.Plot)
    27 .Include(movie => movie.Title)
    28 .Exclude(movie => movie.Id))
    29 .Limit(5)
    30 .ToList();
    31
    32 // print results
    33 foreach (var movie in results) {
    34 Console.WriteLine(movie.ToJson());
    35 }
    36 }
    37}
    38
    39[BsonIgnoreExtraElements]
    40public class MovieDocument {
    41 [BsonIgnoreIfDefault]
    42 public ObjectId Id { get; set; }
    43 public string Plot { get; set; }
    44 public string Title { get; set; }
    45}
  2. Antes de executar o exemplo, substitua <connection-string> por sua cadeia de conexão do Atlas. Certifique-se de que sua cadeia de conexão inclui as credenciais do usuário do banco de dados. Para saber mais, consulte Conectar via Drivers.

3
dotnet run partial-match-example.csproj
{
"plot" : "A divorced woman and her diabetic daughter take refuge in
their newly-purchased house's safe room, when three men break-in,
searching for a missing fortune.",
"title" : "Panic Room",
"highlights" : [{
"path" : "plot",
"score" : 4.3644928932189941,
"texts" : [
{ "type" : "Text", "value" : "A divorced woman and her diabetic daughter take refuge in their " },
{ "type" : "Hit", "value" : "newly-purchased house's safe" },
{ "type" : "Text", "value" : " room, when three men break-in, searching for a missing fortune." }]
}]
}
{
"plot" : "A lonely writer develops an unlikely relationship with his
newly purchased operating system that's designed to meet his every
need.",
"title" : "Her",
"highlights" : [{
"path" : "plot",
"score" : 4.1980500221252441,
"texts" : [
{ "type" : "Text", "value" : "A lonely writer develops an unlikely relationship with his " },
{ "type" : "Hit", "value" : "newly purchased operating system" },
{ "type" : "Text", "value" : " that's designed to meet his every " },
{ "type" : "Hit", "value" : "need" },
{ "type" : "Text", "value" : "." }]
}]
}
{
"plot" : "Set in the near future when artificial organs can be
bought on credit, it revolves around a man who struggles to make the
payments on a heart he has purchased. He must therefore go on the
run before said ticker is repossessed.",
"title" : "Repo Men",
"highlights" : [{
"path" : "plot",
"score" : 2.6448397636413574,
"texts" : [
{ "type" : "Text", "value" : "Set in the " },
{ "type" : "Hit", "value" : "near future when" },
{ "type" : "Text", "value" : " artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has " },
{ "type" : "Hit", "value" : "purchased. He must" }]
}]
}
{
"plot" : "A psychologically troubled novelty supplier is nudged
towards a romance with an English woman, all the while being
extorted by a phone-sex line run by a crooked mattress salesman, and
purchasing stunning amounts of pudding.",
"title" : "Punch-Drunk Love",
"highlights" : [{
"path" : "plot",
"score" : 1.2451990842819214,
"texts" : [
{ "type" : "Text", "value" : "A psychologically troubled " },
{ "type" : "Hit", "value" : "novelty supplier is" },
{ "type" : "Text", "value" : " " },
{ "type" : "Hit", "value" : "nudged towards a" },
{ "type" : "Text", "value" : " romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and " },
{ "type" : "Hit", "value" : "purchasing stunning amounts" },
{ "type" : "Text", "value" : " of pudding." }]
}]
}
{
"plot" : "Jack Conrad is awaiting the death penalty in a corrupt
Central American prison. He is \"purchased\" by a wealthy television
producer and taken to a desolate island where he must fight to the
death against nine other condemned killers from all corners of the
world, with freedom going to the sole survivor.",
"title" : "The Condemned",
"highlights" : [{
"path" : "plot",
"score" : 2.9437892436981201,
"texts" : [
{ "type" : "Text", "value" : "He is \"" },
{ "type" : "Hit", "value" : "purchased\" by a" },
{ "type" : "Text", "value" : " wealthy television producer and taken to a desolate island where he must fight to the death against " },
{ "type" : "Hit", "value" : "nine other condemned" },
{ "type" : "Text", "value" : " killers from all corners of the world, with freedom going to the sole survivor." }]
}]
}
dotnet run partial-match-example.csproj
{
"plot" : "The true story of Richard Pimentel, a brilliant public
speaker with a troubled past, who returns from Vietnam severely
hearing -impaired and finds a new purpose in his landmark efforts on
the behalf of Americans with disabilities.",
"title" : "Music Within",
"highlights" : [{
"path" : "plot",
"score" : 1.9394469261169434,
"texts" : [
{ "type" : "Text", "value" : "The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a " },
{ "type" : "Hit", "value" : "new" },
{ "type" : "Text", "value" : " " },
{ "type" : "Hit", "value" : "purpose" },
{ "type" : "Text", "value" : " in his landmark efforts on the behalf of Americans with disabilities." }]
}]
}
{
"plot" : "The supervillain Megamind finally defeats his nemesis, the
superhero Metro Man. But without a hero, he loses all purpose and
must find new meaning to his life.",
"title" : "Megamind",
"highlights" : [{
"path" : "plot",
"score" : 2.90376877784729,
"texts" : [
{ "type" : "Text", "value" : "But without a hero, he loses all " },
{ "type" : "Hit", "value" : "purpose" },
{ "type" : "Text", "value" : " and must find " },
{ "type" : "Hit", "value" : "new" },
{ "type" : "Text", "value" : " meaning to his life." }]
}]
}
{
"plot" : "An aging Pat Garrett is hired as a lawman on behalf of a
group of wealthy New Mexico cattle barons--his sole purpose being to
bring down his old friend Billy the Kid.",
"title" : "Pat Garrett & Billy the Kid",
"highlights" : [{
"path" : "plot",
"score" : 2.115748405456543,
"texts" : [
{ "type" : "Text", "value" : "An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy " },
{ "type" : "Hit", "value" : "New" },
{ "type" : "Text", "value" : " Mexico cattle barons--his sole " },
{ "type" : "Hit", "value" : "purpose" },
{ "type" : "Text", "value" : " being to bring down his old friend Billy the Kid." }]
}]
}
dotnet run partial-match-example.csproj
{
"plot" : "After the rebels have been brutally overpowered by the
Empire on their newly established base, Luke Skywalker takes
advanced Jedi training with Master Yoda, while his friends are
pursued by Darth Vader as part of his plan to capture Luke.",
"title" : "Star Wars: Episode V - The Empire Strikes Back"
}
{
"plot" : "The new owner of the Cleveland Indians puts together a
purposely horrible team so they'll lose and she can move the team.
But when the plot is uncovered, they start winning just to spite
her.",
"title" : "Major League"
}
{
"plot" : "The true story of Richard Pimentel, a brilliant public
speaker with a troubled past, who returns from Vietnam severely
hearing -impaired and finds a new purpose in his landmark efforts on
the behalf of Americans with disabilities.",
"title" : "Music Within"
}
{
"plot" : "A lonely writer develops an unlikely relationship with his
newly purchased operating system that's designed to meet his every
need.",
"title" : "Her"
}
{
"plot" : "An adrenaline junkie walks away from a whirlwind romance
and embraces a new life as a thief, though he soon finds himself
pursued by veteran police officer and engaged in a turf war with a
local gangster.",
"title" : "Kick"
}
dotnet run partial-match-example.csproj
{
"plot" : "After the rebels have been brutally overpowered by the
Empire on their newly established base, Luke Skywalker takes
advanced Jedi training with Master Yoda, while his friends are
pursued by Darth Vader as part of his plan to capture Luke.",
"title" : "Star Wars: Episode V - The Empire Strikes Back"
}
{
"plot" : "The new owner of the Cleveland Indians puts together a
purposely horrible team so they'll lose and she can move the team.
But when the plot is uncovered, they start winning just to spite
her.",
"title" : "Major League"
}
{
"plot" : "The true story of Richard Pimentel, a brilliant public
speaker with a troubled past, who returns from Vietnam severely
hearing -impaired and finds a new purpose in his landmark efforts on
the behalf of Americans with disabilities.",
"title" : "Music Within"
}
{
"plot" : "A lonely writer develops an unlikely relationship with his
newly purchased operating system that's designed to meet his every
need.",
"title" : "Her"
}
{
"plot" : "An adrenaline junkie walks away from a whirlwind romance
and embraces a new life as a thief, though he soon finds himself
pursued by veteran police officer and engaged in a turf war with a
local gangster.",
"title" : "Kick"
}
1
2

A consulta seguinte usa o operador para consultar o campo plot da coleção sample_mflix.movies. A consulta inclui um:

  • $limit estágio para limitar a saída a 5 resultados

  • Estágio $project para excluir todos os campos, exceto title e plot

A consulta permite o seguinte para corresponder a string de consulta new purchase a uma palavra no campo:

  • Permite que as palavras new e purchase apareçam em qualquer lugar no campo plot.

  • Permite que a variação de dois caracteres na string da query corresponda a query a uma palavra no campo, mas não permite que o primeiro caractere da string de consulta seja alterado.

  • Permite considerar até duzentos e cinquenta e seis termos semelhantes.

1package main
2
3import (
4 "context"
5 "fmt"
6 "time"
7
8 "go.mongodb.org/mongo-driver/bson"
9 "go.mongodb.org/mongo-driver/mongo"
10 "go.mongodb.org/mongo-driver/mongo/options"
11)
12
13// define structure of movies collection
14type MovieCollection struct {
15 title string `bson:"Title,omitempty"`
16 plot string `bson:"Plot,omitempty"`
17}
18
19func main() {
20 var err error
21 // connect to the Atlas cluster
22 ctx := context.Background()
23 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>"))
24 if err != nil {
25 panic(err)
26 }
27 defer client.Disconnect(ctx)
28 // set namespace
29 collection := client.Database("sample_mflix").Collection("movies")
30 // define pipeline
31 searchStage := bson.D{{"$search", bson.M{
32 "index": "partial-match-tutorial",
33 "autocomplete": bson.M{
34 "path": "plot", "query": "new purchase", "tokenOrder": "any", "fuzzy": bson.M{
35 "maxEdits": 2, "prefixLength": 1, "maxExpansions": 256},
36 },
37 "highlight": bson.D{
38 {"path", "plot"},
39 },
40 }}}
41 limitStage := bson.D{{"$limit", 5}}
42 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"plot", 1}, {"_id", 0}, {"highlights", bson.D{{"$meta", "searchHighlights"}}}}}}
43 // specify the amount of time the operation can run on the server
44 opts := options.Aggregate().SetMaxTime(5 * time.Second)
45 // run pipeline
46 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts)
47 if err != nil {
48 panic(err)
49 }
50 // print results
51 var results []bson.D
52 if err = cursor.All(context.TODO(), &results); err != nil {
53 panic(err)
54 }
55 for _, result := range results {
56 fmt.Println(result)
57 }
58}

A query especifica a string de query new purpose com uma distância posicional de até 5 entre new e purpose.

1package main
2
3import (
4 "context"
5 "fmt"
6 "time"
7
8 "go.mongodb.org/mongo-driver/bson"
9 "go.mongodb.org/mongo-driver/mongo"
10 "go.mongodb.org/mongo-driver/mongo/options"
11)
12
13// define structure of movies collection
14type MovieCollection struct {
15 title string `bson:"Title,omitempty"`
16 plot string `bson:"Plot,omitempty"`
17}
18
19func main() {
20 var err error
21 // connect to the Atlas cluster
22 ctx := context.Background()
23 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>"))
24 if err != nil {
25 panic(err)
26 }
27 defer client.Disconnect(ctx)
28 // set namespace
29 collection := client.Database("sample_mflix").Collection("movies")
30 // define pipeline
31 searchStage := bson.D{{"$search", bson.M{
32 "index": "partial-match-tutorial",
33 "phrase": bson.D{{"path", "plot"}, {"query", "new purpose"}, {"slop", 5}},
34 "highlight": bson.D{{"path", "plot"}},
35 }}}
36 limitStage := bson.D{{"$limit", 5}}
37 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"plot", 1}, {"_id", 0}, {"highlights", bson.D{{"$meta", "searchHighlights"}}}}}}
38 // specify the amount of time the operation can run on the server
39 opts := options.Aggregate().SetMaxTime(5 * time.Second)
40 // run pipeline
41 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts)
42 if err != nil {
43 panic(err)
44 }
45 // print results
46 var results []bson.D
47 if err = cursor.All(context.TODO(), &results); err != nil {
48 panic(err)
49 }
50 for _, result := range results {
51 fmt.Println(result)
52 }
53}

A query usa a expressão regular (.*) para corresponder a qualquer número de caracteres com a string de query parcial.

1package main
2
3import (
4 "context"
5 "fmt"
6 "time"
7
8 "go.mongodb.org/mongo-driver/bson"
9 "go.mongodb.org/mongo-driver/mongo"
10 "go.mongodb.org/mongo-driver/mongo/options"
11)
12
13// define structure of movies collection
14type MovieCollection struct {
15 title string `bson:"Title,omitempty"`
16 plot string `bson:"Plot,omitempty"`
17}
18
19func main() {
20 var err error
21 // connect to the Atlas cluster
22 ctx := context.Background()
23 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>"))
24 if err != nil {
25 panic(err)
26 }
27 defer client.Disconnect(ctx)
28 // set namespace
29 collection := client.Database("sample_mflix").Collection("movies")
30 // define pipeline
31 searchStage := bson.D{{"$search", bson.M{
32 "index": "partial-match-tutorial",
33 "regex": bson.D{{"path", "plot"}, {"query", "(.*)new(.*) pur(.*)"}},
34 }}}
35 limitStage := bson.D{{"$limit", 5}}
36 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"plot", 1}, {"_id", 0}}}}
37 // specify the amount of time the operation can run on the server
38 opts := options.Aggregate().SetMaxTime(5 * time.Second)
39 // run pipeline
40 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts)
41 if err != nil {
42 panic(err)
43 }
44 // print results
45 var results []bson.D
46 if err = cursor.All(context.TODO(), &results); err != nil {
47 panic(err)
48 }
49 for _, result := range results {
50 fmt.Println(result)
51 }
52}

A query usa * na string de query para corresponder 0 ou mais caracteres antes e depois das palavras especificadas na string de query parcial.

1package main
2
3import (
4 "context"
5 "fmt"
6 "time"
7
8 "go.mongodb.org/mongo-driver/bson"
9 "go.mongodb.org/mongo-driver/mongo"
10 "go.mongodb.org/mongo-driver/mongo/options"
11)
12
13// define structure of movies collection
14type MovieCollection struct {
15 title string `bson:"Title,omitempty"`
16 plot string `bson:"Plot,omitempty"`
17}
18
19func main() {
20 var err error
21 // connect to the Atlas cluster
22 ctx := context.Background()
23 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>"))
24 if err != nil {
25 panic(err)
26 }
27 defer client.Disconnect(ctx)
28 // set namespace
29 collection := client.Database("sample_mflix").Collection("movies")
30 // define pipeline
31 searchStage := bson.D{{"$search", bson.M{
32 "index": "partial-match-tutorial",
33 "wildcard": bson.D{{"path", "plot"}, {"query", "*new* pur*"}},
34 }}}
35 limitStage := bson.D{{"$limit", 5}}
36 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"plot", 1}, {"_id", 0}}}}
37 // specify the amount of time the operation can run on the server
38 opts := options.Aggregate().SetMaxTime(5 * time.Second)
39 // run pipeline
40 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts)
41 if err != nil {
42 panic(err)
43 }
44 // print results
45 var results []bson.D
46 if err = cursor.All(context.TODO(), &results); err != nil {
47 panic(err)
48 }
49 for _, result := range results {
50 fmt.Println(result)
51 }
52}

Observação

Antes de executar o exemplo, substitua <connection-string> por sua cadeia de conexão do Atlas. Certifique-se de que sua cadeia de conexão inclui as credenciais do usuário do banco de dados. Para saber mais, consulte Conectar via Drivers.

3
go run partial-match-query.go
[
{plot A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune.}
{title Panic Room}
{highlights [
[
{score 4.364492893218994}
{path plot}
{texts [
[{value A divorced woman and her diabetic daughter take refuge in their } {type text}]
[{value newly-purchased house's safe} {type hit}]
[{value room, when three men break-in, searching for a missing fortune.} {type text}]
]}
]
]}
]
[
{plot A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.}
{title Her}
{highlights [
[
{score 4.198050022125244}
{path plot}
{texts [
[{value A lonely writer develops an unlikely relationship with his } {type text}]
[{value newly purchased operating system} {type hit}]
[{value that's designed to meet his every } {type text}]
[{value need} {type hit}]
[{value .} {type text}]
]}
]
]}
]
[
{plot Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must therefore go on the run before said ticker is repossessed.}
{title Repo Men}
{highlights [
[
{score 2.6448397636413574}
{path plot}
{texts [
[{value Set in the } {type text}]
[{value near future when} {type hit}]
[{value artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has } {type text}]
[{value purchased. He must} {type hit}]
]}
]
]}
]
[
{plot A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding.}
{title Punch-Drunk Love}
{highlights [
[
{score 1.2451990842819214}
{path plot}
{texts [
[{value A psychologically troubled } {type text}]
[{value novelty supplier is} {type hit}]
[{value } {type text}]
[{value nudged towards a} {type hit}]
[{value romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and } {type text}]
[{value purchasing stunning amounts} {type hit}]
[{value of pudding.} {type text}]
]}
]
]}
]
[
{plot Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is "purchased" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor.}
{title The Condemned}
{highlights [
[
{score 2.94378924369812}
{path plot}
{texts [
[{value He is "} {type text}]
[{value purchased" by a} {type hit}]
[{value wealthy television producer and taken to a desolate island where he must fight to the death against } {type text}]
[{value nine other condemned} {type hit}]
[{value killers from all corners of the world, with freedom going to the sole survivor.} {type text}]
]}
]
]}
]
go run partial-match-query.go
[
{plot The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.}
{title Music Within}
{highlights [[
{score 1.9394469261169434}
{path plot}
{texts [
[{value The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a } {type text}]
[{value new} {type hit}]
[{value } {type text}]
[{value purpose} {type hit}]
[{value in his landmark efforts on the behalf of Americans with disabilities.} {type text}
]
]}
]]}
]
[
{plot The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life.}
{title Megamind}
{highlights [[
{score 2.90376877784729}
{path plot}
{texts [
[{value But without a hero, he loses all } {type text}]
[{value purpose} {type hit}]
[{value and must find } {type text}]
[{value new} {type hit}]
[{value meaning to his life.} {type text}]
]}
]]}
]
[
{plot An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid.}
{title Pat Garrett & Billy the Kid}
{highlights [[
{score 2.115748405456543}
{path plot}
{texts [
[{value An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy } {type text}]
[{value New} {type hit}]
[{value Mexico cattle barons--his sole } {type text}]
[{value purpose} {type hit}]
[{value being to bring down his old friend Billy the Kid.} {type text}]
]}
]]}
]
go run partial-match-query.go
[
{plot After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.}
{title Star Wars: Episode V - The Empire Strikes Back}
]
[
{plot The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.}
{title Major League}
]
[
{plot The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.}
{title Music Within}
]
[
{plot A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.}
{title Her}
]
[
{plot An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.}
{title Kick}
]
go run partial-match-query.go
[
{plot After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.}
{title Star Wars: Episode V - The Empire Strikes Back}
]
[
{plot The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.}
{title Major League}
]
[
{plot The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.}
{title Music Within}
]
[
{plot A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.}
{title Her}
]
[
{plot An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.}
{title Kick}
]
1
junit
4.11 ou versão superior
mongodb-driver-sync
4.3.0 ou uma versão superior
slf4j-log4j12
1.7.30 ou uma versão superior
2
3

O exemplo de código executa as seguintes tarefas:

  • Importa pacotes e dependências do mongodb .

  • Estabelece uma ligação ao seu cluster Atlas.

  • Executa uma query que usa:

    • $search estágio para procurar um termo

    • $limit estágio para limitar a saída a 5 resultados

    • Estágio $project para excluir todos os campos, exceto title e plot

  • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

A consulta permite o seguinte para corresponder a string de consulta new purchase a uma palavra no campo:

  • Permite que as palavras new e purchase apareçam em qualquer lugar no campo plot.

  • Permite que a variação de dois caracteres na string da query corresponda a query a uma palavra no campo, mas não permite que o primeiro caractere da string de consulta seja alterado.

  • Permite considerar até duzentos e cinquenta e seis termos semelhantes.

1import java.util.Arrays;
2import static com.mongodb.client.model.Aggregates.limit;
3import static com.mongodb.client.model.Aggregates.project;
4import static com.mongodb.client.model.Projections.excludeId;
5import static com.mongodb.client.model.Projections.fields;
6import static com.mongodb.client.model.Projections.include;
7import com.mongodb.client.MongoClient;
8import com.mongodb.client.MongoClients;
9import com.mongodb.client.MongoCollection;
10import com.mongodb.client.MongoDatabase;
11import org.bson.Document;
12
13public class PartialMatchQuery {
14 public static void main( String[] args ) {
15
16 // define query
17 Document agg = new Document("$search",
18 new Document ("index", "partial-match-tutorial")
19 .append("autocomplete",
20 new Document("path", "plot")
21 .append("query", "new purchase")
22 .append("tokenOrder", "any")
23 .append("fuzzy",
24 new Document("maxEdits", 2)
25 .append("prefixLength", 1)
26 .append("maxExpansions", 256))));
27
28 // specify connection
29 String uri = "<connection-string>";
30
31 // establish connection and set namespace
32 try (MongoClient mongoClient = MongoClients.create(uri)) {
33 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
34 MongoCollection<Document> collection = database.getCollection("movies");
35 // run query and print results
36 collection.aggregate(Arrays.asList(agg,
37 limit(5),
38 project(fields(excludeId(), include("title", "plot")))))
39 .forEach(doc -> System.out.println(doc.toJson()));
40 }
41 }
42}

A query especifica a string de query new purpose com uma distância posicional de até 5 entre new e purpose.

1import java.util.Arrays;
2
3import static com.mongodb.client.model.Aggregates.limit;
4import static com.mongodb.client.model.Aggregates.project;
5import static com.mongodb.client.model.Projections.excludeId;
6import static com.mongodb.client.model.Projections.fields;
7import static com.mongodb.client.model.Projections.include;
8import com.mongodb.client.MongoClient;
9import com.mongodb.client.MongoClients;
10import com.mongodb.client.MongoCollection;
11import com.mongodb.client.MongoDatabase;
12import org.bson.Document;
13
14public class PartialMatchQuery {
15 public static void main( String[] args ) {
16 // define query
17 Document agg = new Document("$search",
18 new Document("index", "partial-match-tutorial")
19 .append("phrase",
20 new Document("path", "plot")
21 .append("query", "new purpose")
22 .append("slop", 5)));
23
24 // specify connection
25 String uri = "<connection-string>";
26
27 // establish connection and set namespace
28 try (MongoClient mongoClient = MongoClients.create(uri)) {
29 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
30 MongoCollection<Document> collection = database.getCollection("movies");
31
32 // run query and print results
33 collection.aggregate(Arrays.asList(agg,
34 limit(5),
35 project(fields(excludeId(), include("title", "plot")))))
36 .forEach(doc -> System.out.println(doc.toJson()));
37 }
38 }
39}

A query usa a expressão regular (.*) para corresponder a qualquer número de caracteres com a string de query parcial.

1import java.util.Arrays;
2
3import static com.mongodb.client.model.Aggregates.limit;
4import static com.mongodb.client.model.Aggregates.project;
5import static com.mongodb.client.model.Projections.excludeId;
6import static com.mongodb.client.model.Projections.fields;
7import static com.mongodb.client.model.Projections.include;
8import com.mongodb.client.MongoClient;
9import com.mongodb.client.MongoClients;
10import com.mongodb.client.MongoCollection;
11import com.mongodb.client.MongoDatabase;
12import org.bson.Document;
13
14public class PartialMatchQuery {
15 public static void main( String[] args ) {
16 // define query
17 Document agg = new Document("$search",
18 new Document ("index", "partial-match-tutorial")
19 .append("regex",
20 new Document("path", "plot")
21 .append("query", "(.*)new(.*) pur(.*)")));
22 // specify connection
23 String uri = "<connection-string>";
24 // establish connection and set namespace
25 try (MongoClient mongoClient = MongoClients.create(uri)) {
26 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
27 MongoCollection<Document> collection = database.getCollection("movies");
28 // run query and print results
29 collection.aggregate(Arrays.asList(agg,
30 limit(5),
31 project(fields(excludeId(), include("title", "plot")))))
32 .forEach(doc -> System.out.println(doc.toJson()));
33 }
34 }
35}

A query usa * na string de query para corresponder 0 ou mais caracteres antes e depois das palavras especificadas na string de query parcial.

1import java.util.Arrays;
2
3import static com.mongodb.client.model.Aggregates.limit;
4import static com.mongodb.client.model.Aggregates.project;
5import static com.mongodb.client.model.Projections.excludeId;
6import static com.mongodb.client.model.Projections.fields;
7import static com.mongodb.client.model.Projections.include;
8import com.mongodb.client.MongoClient;
9import com.mongodb.client.MongoClients;
10import com.mongodb.client.MongoCollection;
11import com.mongodb.client.MongoDatabase;
12import org.bson.Document;
13
14public class PartialMatchQuery {
15 public static void main( String[] args ) {
16 // define query
17 Document agg = new Document("$search",
18 new Document ("index", "partial-match-tutorial")
19 .append("wildcard",
20 new Document("path", "plot")
21 .append("query", "*new* pur*")));
22 // specify connection
23 String uri = "<connection-string>";
24 // establish connection and set namespace
25 try (MongoClient mongoClient = MongoClients.create(uri)) {
26 MongoDatabase database = mongoClient.getDatabase("sample_mflix");
27 MongoCollection<Document> collection = database.getCollection("movies");
28 // run query and print results
29 collection.aggregate(Arrays.asList(agg,
30 limit(5),
31 project(fields(excludeId(), include("title", "plot")))))
32 .forEach(doc -> System.out.println(doc.toJson()));
33 }
34 }
35}

Observação

Para executar o código de amostra em seu ambiente Maven, adicione o seguinte acima das declarações de importação em seu arquivo.

package com.mongodb.drivers;

Antes de executar o exemplo, substitua <connection-string> por sua cadeia de conexão do Atlas. Certifique-se de que sua cadeia de conexão inclui as credenciais do usuário do banco de dados. Para saber mais, consulte Conectar via Drivers.

4
javac PartialMatchQuery.java
java PartialMatchQuery
{
"plot": "A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune.",
"title": "Panic Room"
}
{
"plot": "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
"title": "Her"
}
{
"plot": "Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must therefore go on the run before said ticker is repossessed.",
"title": "Repo Men"
}
{
"plot": "A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding.",
"title": "Punch-Drunk Love"
}
{
"plot": "Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is \"purchased\" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor.",
"title": "The Condemned"
}
javac PartialMatchQuery.java
java PartialMatchQuery
{
"plot": "The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.",
"title": "Music Within"
}
{
"plot": "The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life.",
"title": "Megamind"
}
{
"plot": "An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid.",
"title": "Pat Garrett & Billy the Kid"
}
javac PartialMatchQuery.java
java PartialMatchQuery
{
"plot": "After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.",
"title": "Star Wars: Episode V - The Empire Strikes Back"
}
{
"plot": "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.",
"title": "Major League"
}
{
"plot": "The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.",
"title": "Music Within"
}
{
"plot": "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
"title": "Her"
}
{
"plot": "An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.",
"title": "Kick"
}
javac PartialMatchQuery.java
java PartialMatchQuery
{
"plot": "After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.",
"title": "Star Wars: Episode V - The Empire Strikes Back"
}
{
"plot": "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.",
"title": "Major League"
}
{
"plot": "The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.",
"title": "Music Within"
}
{
"plot": "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
"title": "Her"
}
{
"plot": "An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.",
"title": "Kick"
}
1
mongodb-driver-kotlin-coroutine
4.10.0 ou uma versão superior
2
3

O exemplo de código executa as seguintes tarefas:

  • Importa pacotes e dependências do mongodb .

  • Estabelece uma ligação ao seu cluster Atlas.

  • Executa uma query que usa:

    • $search estágio para procurar um termo

    • $limit estágio para limitar a saída a 5 resultados

    • Estágio $project para excluir todos os campos, exceto title e plot

  • Imprime os documentos que correspondem à query da instância AggregateFlow.

A consulta permite o seguinte para corresponder a string de consulta new purchase a uma palavra no campo:

  • Permite que as palavras new e purchase apareçam em qualquer lugar no campo plot.

  • Permite que a variação de dois caracteres na string da query corresponda a query a uma palavra no campo, mas não permite que o primeiro caractere da string de consulta seja alterado.

  • Permite considerar até duzentos e cinquenta e seis termos semelhantes.

1import com.mongodb.client.model.Aggregates.limit
2import com.mongodb.client.model.Aggregates.project
3import com.mongodb.client.model.Projections.*
4import com.mongodb.kotlin.client.coroutine.MongoClient
5import kotlinx.coroutines.runBlocking
6import org.bson.Document
7
8fun main() {
9 // establish connection and set namespace
10 val uri = "<connection-string>"
11 val mongoClient = MongoClient.create(uri)
12 val database = mongoClient.getDatabase("sample_mflix")
13 val collection = database.getCollection<Document>("movies")
14
15 runBlocking {
16 // define query
17 val agg = Document(
18 "\$search",
19 Document("index", "partial-match-tutorial")
20 .append(
21 "autocomplete",
22 Document("path", "plot")
23 .append("query", "new purchase")
24 .append("tokenOrder", "any")
25 .append(
26 "fuzzy",
27 Document("maxEdits", 2)
28 .append("prefixLength", 1)
29 .append("maxExpansions", 256)
30 )
31 )
32 )
33
34 // run query and print results
35 val resultsFlow = collection.aggregate<Document>(
36 listOf(
37 agg,
38 limit(5),
39 project(fields(excludeId(), include("title", "plot")))
40 )
41 )
42 resultsFlow.collect { println(it) }
43 }
44 mongoClient.close()
45}

A query especifica a string de query new purpose com uma distância posicional de até 5 entre new e purpose.

1import com.mongodb.client.model.Aggregates.limit
2import com.mongodb.client.model.Aggregates.project
3import com.mongodb.client.model.Projections.*
4import com.mongodb.kotlin.client.coroutine.MongoClient
5import kotlinx.coroutines.runBlocking
6import org.bson.Document
7
8fun main() {
9 // establish connection and set namespace
10 val uri = "<connection-string>"
11 val mongoClient = MongoClient.create(uri)
12 val database = mongoClient.getDatabase("sample_mflix")
13 val collection = database.getCollection<Document>("movies")
14
15 runBlocking {
16 // define query
17 val agg = Document(
18 "\$search",
19 Document("index", "partial-match-tutorial")
20 .append(
21 "phrase",
22 Document("path", "plot")
23 .append("query", "new purpose")
24 .append("slop", 5)
25 )
26 )
27
28 // run query and print results
29 val resultsFlow = collection.aggregate<Document>(
30 listOf(
31 agg,
32 limit(5),
33 project(fields(excludeId(), include("title", "plot")))
34 )
35 )
36 resultsFlow.collect { println(it) }
37 }
38 mongoClient.close()
39}

A query usa a expressão regular (.*) para corresponder a qualquer número de caracteres com a string de query parcial.

1import com.mongodb.client.model.Aggregates.limit
2import com.mongodb.client.model.Aggregates.project
3import com.mongodb.client.model.Projections.*
4import com.mongodb.kotlin.client.coroutine.MongoClient
5import kotlinx.coroutines.runBlocking
6import org.bson.Document
7
8fun main() {
9 // establish connection and set namespace
10 val uri = "<connection-string>"
11 val mongoClient = MongoClient.create(uri)
12 val database = mongoClient.getDatabase("sample_mflix")
13 val collection = database.getCollection<Document>("movies")
14
15 runBlocking {
16 // define query
17 val agg = Document(
18 "\$search",
19 Document("index", "partial-match-tutorial")
20 .append(
21 "regex",
22 Document("path", "plot")
23 .append("query", "(.*)new(.*) pur(.*)")
24 )
25 )
26
27 // run query and print results
28 val resultsFlow = collection.aggregate<Document>(
29 listOf(
30 agg,
31 limit(5),
32 project(fields(excludeId(), include("title", "plot")))
33 )
34 )
35 resultsFlow.collect { println(it) }
36 }
37 mongoClient.close()
38}

A query usa * na string de query para corresponder 0 ou mais caracteres antes e depois das palavras especificadas na string de query parcial.

1import com.mongodb.client.model.Aggregates.limit
2import com.mongodb.client.model.Aggregates.project
3import com.mongodb.client.model.Projections.*
4import com.mongodb.kotlin.client.coroutine.MongoClient
5import kotlinx.coroutines.runBlocking
6import org.bson.Document
7
8fun main() {
9 // establish connection and set namespace
10 val uri = "<connection-string>"
11 val mongoClient = MongoClient.create(uri)
12 val database = mongoClient.getDatabase("sample_mflix")
13 val collection = database.getCollection<Document>("movies")
14
15 runBlocking {
16 // define query
17 val agg = Document(
18 "\$search",
19 Document("index", "partial-match-tutorial")
20 .append(
21 "wildcard",
22 Document("path", "plot")
23 .append("query", "*new* pur*")
24 )
25 )
26
27 // run query and print results
28 val resultsFlow = collection.aggregate<Document>(
29 listOf(
30 agg,
31 limit(5),
32 project(fields(excludeId(), include("title", "plot")))
33 )
34 )
35 resultsFlow.collect { println(it) }
36 }
37 mongoClient.close()
38}

Antes de executar o exemplo, substitua <connection-string> por sua cadeia de conexão do Atlas. Certifique-se de que sua cadeia de conexão inclui as credenciais do usuário do banco de dados. Para saber mais, consulte Conectar via Drivers.

4

Ao executar o programa PartialMatchQuery.kt no seu IDE, ele imprime os seguintes documentos:

Document{{plot=A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune., title=Panic Room}}
Document{{plot=A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need., title=Her}}
Document{{plot=A country boy becomes the head of a gang through the purchase of some lucky roses from an old lady. He and a singer at the gang's nightclub try to do a good deed for the old lady when her daughter comes to visit., title=Miracles - Mr. Canton and Lady Rose}}
Document{{plot=A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding., title=Punch-Drunk Love}}
Document{{plot=Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is "purchased" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor., title=The Condemned}}
Document{{plot=The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities., title=Music Within}}
Document{{plot=The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life., title=Megamind}}
Document{{plot=An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid., title=Pat Garrett & Billy the Kid}}
Document{{plot=After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke., title=Star Wars: Episode V - The Empire Strikes Back}}
Document{{plot=The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her., title=Major League}}
Document{{plot=The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities., title=Music Within}}
Document{{plot=A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need., title=Her}}
Document{{plot=An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster., title=Kick}}
Document{{plot=After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke., title=Star Wars: Episode V - The Empire Strikes Back}}
Document{{plot=The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her., title=Major League}}
Document{{plot=The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities., title=Music Within}}
Document{{plot=A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need., title=Her}}
Document{{plot=An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster., title=Kick}}
1
2

O exemplo de código executa as seguintes tarefas:

  • Importa mongodb, o driver do Node.js da MongoDB.

  • Cria uma instância da classe MongoClient para estabelecer uma conexão com seu cluster do Atlas.

  • Executa uma query que usa:

    • $search estágio para procurar um termo

    • $limit estágio para limitar a saída a 5 resultados

    • Estágio $project para excluir todos os campos, exceto title e plot

  • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

A consulta permite o seguinte para corresponder a string de consulta new purchase a uma palavra no campo:

  • Permite que as palavras new e purchase apareçam em qualquer lugar no campo plot.

  • Permite que a variação de dois caracteres na string da query corresponda a query a uma palavra no campo, mas não permite que o primeiro caractere da string de consulta seja alterado.

  • Permite considerar até duzentos e cinquenta e seis termos semelhantes.

1const MongoClient = require("mongodb").MongoClient;
2const assert = require("assert");
3
4const agg = [
5 {
6 '$search': {
7 'index': 'partial-match-tutorial',
8 'autocomplete': {
9 'path': 'plot',
10 'query': 'new purchase',
11 'tokenOrder': 'any',
12 'fuzzy': {
13 'maxEdits': 2,
14 'prefixLength': 1,
15 'maxExpansions': 256
16 }
17 },
18 'highlight': {
19 'path': 'plot'
20 }
21 }
22 }, {
23 '$limit': 5
24 }, {
25 '$project': {
26 '_id': 0,
27 'title': 1,
28 'plot': 1,
29 'highlights': {
30 '$meta': 'searchHighlights'
31 }
32 }
33 }
34];
35
36MongoClient.connect(
37 "<connection-string>",
38 { useNewUrlParser: true, useUnifiedTopology: true },
39 async function (connectErr, client) {
40 assert.equal(null, connectErr);
41 const coll = client.db("sample_mflix").collection("movies");
42 let cursor = await coll.aggregate(agg);
43 await cursor.forEach((doc) => console.log(doc));
44 client.close();
45 }
46);

A query especifica a string de query new purpose com uma distância posicional de até 5 entre new e purpose.

1const MongoClient = require("mongodb").MongoClient;
2const assert = require("assert");
3
4const agg = [
5 {
6 '$search': {
7 'index': 'partial-match-tutorial',
8 'phrase': {
9 'path': 'plot',
10 'query': 'new purpose',
11 'slop': 5
12 },
13 'highlight': {
14 'path': 'plot'
15 }
16 }
17 }, {
18 '$limit': 5
19 }, {
20 '$project': {
21 '_id': 0,
22 'plot': 1,
23 'title': 1,
24 'highlights': {
25 '$meta': 'searchHighlights'
26 }
27 }
28 }
29];
30
31MongoClient.connect(
32 "<connection-string>",
33 { useNewUrlParser: true, useUnifiedTopology: true },
34 async function (connectErr, client) {
35 assert.equal(null, connectErr);
36 const coll = client.db("sample_mflix").collection("movies");
37 let cursor = await coll.aggregate(agg);
38 await cursor.forEach((doc) => console.log(doc));
39 client.close();
40 }
41);

A query usa a expressão regular (.*) para corresponder a qualquer número de caracteres com a string de query parcial.

1const MongoClient = require("mongodb").MongoClient;
2const assert = require("assert");
3
4const agg = [
5 {
6 '$search': {
7 'index': 'partial-match-tutorial',
8 'regex': {
9 'path': 'plot',
10 'query': '(.*)new(.*) pur(.*)'
11 }
12 }
13 }, {
14 '$limit': 5
15 }, {
16 '$project': {
17 '_id': 0,
18 'plot': 1,
19 'title': 1
20 }
21 }
22];
23
24MongoClient.connect(
25 "<connection-string>",
26 { useNewUrlParser: true, useUnifiedTopology: true },
27 async function (connectErr, client) {
28 assert.equal(null, connectErr);
29 const coll = client.db("sample_mflix").collection("movies");
30 let cursor = await coll.aggregate(agg);
31 await cursor.forEach((doc) => console.log(doc));
32 client.close();
33 }
34);

A query usa * na string de query para corresponder 0 ou mais caracteres antes e depois das palavras especificadas na string de query parcial.

1const MongoClient = require("mongodb").MongoClient;
2const assert = require("assert");
3
4const agg = [
5 {
6 '$search': {
7 'index': 'partial-match-tutorial',
8 'wildcard': {
9 'path': 'plot',
10 'query': '*new* pur*'
11 }
12 }
13 }, {
14 '$limit': 5
15 }, {
16 '$project': {
17 '_id': 0,
18 'plot': 1,
19 'title': 1
20 }
21 }
22];
23
24MongoClient.connect(
25 "<connection-string>",
26 { useNewUrlParser: true, useUnifiedTopology: true },
27 async function (connectErr, client) {
28 assert.equal(null, connectErr);
29 const coll = client.db("sample_mflix").collection("movies");
30 let cursor = await coll.aggregate(agg);
31 await cursor.forEach((doc) => console.log(doc));
32 client.close();
33 }
34);

Observação

Antes de executar o exemplo, substitua <connection-string> por sua cadeia de conexão do Atlas. Certifique-se de que sua cadeia de conexão inclui as credenciais do usuário do banco de dados. Para saber mais, consulte Conectar via Drivers.

3
node partial-match-query.js
{
plot: "A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune.",
title: 'Panic Room',
highlights: [ { score: 4.364492893218994, path: 'plot', texts: [Array] } ]
}
{
plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
title: 'Her',
highlights: [ { score: 4.198050022125244, path: 'plot', texts: [Array] } ]
}
{
plot: "Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must therefore go on the run before said ticker is repossessed.",
title: 'Repo Men',
highlights: [
{ score: 2.6448397636413574, path: 'plot', texts: [Array] }
]
}
{
plot: 'A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding.',
title: 'Punch-Drunk Love',
highlights: [ { score: 1.2451990842819214, path: 'plot', texts: [Array] } ]
}
{
plot: 'Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is "purchased" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor.',
title: 'The Condemned',
highlights: [ { score: 2.94378924369812, path: 'plot', texts: [Array] } ]
}
node partial-match-query.js
{
plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.',
title: 'Music Within',
highlights: [ { score: 1.9394469261169434, path: 'plot', texts: [Array] } ]
}
{
plot: 'The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life.',
title: 'Megamind',
highlights: [ { score: 2.90376877784729, path: 'plot', texts: [Array] } ]
}
{
plot: 'An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid.',
title: 'Pat Garrett & Billy the Kid',
highlights: [ { score: 2.115748405456543, path: 'plot', texts: [Array] } ]
}
node partial-match-query.js
{
plot: 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.',
title: 'Star Wars: Episode V - The Empire Strikes Back'
}
{
plot: "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.",
title: 'Major League'
}
{
plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.',
title: 'Music Within'
}
{
plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
title: 'Her'
}
{
plot: 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.',
title: 'Kick'
}
node partial-match-query.js
{
plot: 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.',
title: 'Star Wars: Episode V - The Empire Strikes Back'
}
{
plot: "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.",
title: 'Major League'
}
{
plot: 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.',
title: 'Music Within'
}
{
plot: "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
title: 'Her'
}
{
plot: 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.',
title: 'Kick'
}
1
2

O seguinte exemplo de código:

  • Importa pymongo, o driver Python do MongoDB e o módulo dns , que é necessário para conectar pymongo a Atlas usando uma connection string de lista de sementes de DNS .

  • Cria uma instância da classe MongoClient para estabelecer uma conexão com seu cluster do Atlas.

  • Executa uma query que usa:

    • $search estágio para procurar um termo

    • $limit estágio para limitar a saída a 5 resultados

    • Estágio $project para excluir todos os campos, exceto title e plot

  • Itera sobre o cursor para imprimir os documentos que correspondem à consulta.

A consulta permite o seguinte para corresponder a string de consulta new purchase a uma palavra no campo:

  • Permite que as palavras new e purchase apareçam em qualquer lugar no campo plot.

  • Permite que a variação de dois caracteres na string da query corresponda a query a uma palavra no campo, mas não permite que o primeiro caractere da string de consulta seja alterado.

  • Permite considerar até duzentos e cinquenta e seis termos semelhantes.

1import pymongo
2import dns
3
4client = pymongo.MongoClient('<connection-string>')
5result = client['sample_mflix']['movies'].aggregate([
6 {
7 '$search': {
8 'index': 'partial-match-tutorial',
9 'autocomplete': {
10 'path': 'plot',
11 'query': 'new purchase',
12 'tokenOrder': 'any',
13 'fuzzy': {
14 'maxEdits': 2,
15 'prefixLength': 1,
16 'maxExpansions': 256
17 }
18 },
19 'highlight': {
20 'path': 'plot'
21 }
22 }
23 }, {
24 '$limit': 5
25 }, {
26 '$project': {
27 '_id': 0,
28 'title': 1,
29 'plot': 1,
30 'highlights': {
31 '$meta': 'searchHighlights'
32 }
33 }
34 }
35])
36
37for i in result:
38 print(i)

A query especifica a string de query new purpose com uma distância posicional de até 5 entre new e purpose.

1import pymongo
2import dns
3
4client = pymongo.MongoClient('<connection-string>')
5result = client['sample_mflix']['movies'].aggregate([
6 {
7 '$search': {
8 'index': 'partial-match-tutorial',
9 'phrase': {
10 'path': 'plot',
11 'query': 'new purpose',
12 'slop': 5
13 },
14 'highlight': {
15 'path': 'plot'
16 }
17 }
18 }, {
19 '$limit': 5
20 }, {
21 '$project': {
22 '_id': 0,
23 'plot': 1,
24 'title': 1,
25 'highlights': {
26 '$meta': 'searchHighlights'
27 }
28 }
29 }
30])
31
32for i in result:
33 print(i)

A query usa a expressão regular (.*) para corresponder a qualquer número de caracteres com a string de query parcial.

1import pymongo
2import dns
3
4client = pymongo.MongoClient('<connection-string>')
5result = client['sample_mflix']['movies'].aggregate([
6 {
7 '$search': {
8 'index': 'partial-match-tutorial',
9 'regex': {
10 'path': 'plot',
11 'query': '(.*)new(.*) pur(.*)'
12 }
13 }
14 }, {
15 '$limit': 5
16 }, {
17 '$project': {
18 '_id': 0,
19 'plot': 1,
20 'title': 1
21 }
22 }
23])
24
25for i in result:
26 print(i)

A query usa * na string de query para corresponder 0 ou mais caracteres antes e depois das palavras especificadas na string de query parcial.

1import pymongo
2import dns
3
4client = pymongo.MongoClient('<connection-string>')
5result = client['sample_mflix']['movies'].aggregate([
6 {
7 '$search': {
8 'index': 'partial-match-tutorial',
9 'wildcard': {
10 'path': 'plot',
11 'query': '*new* pur*'
12 }
13 }
14 }, {
15 '$limit': 5
16 }, {
17 '$project': {
18 '_id': 0,
19 'plot': 1,
20 'title': 1
21 }
22 }
23])
24
25for i in result:
26 print(i)

Observação

Antes de executar o exemplo, substitua <connection-string> por sua cadeia de conexão do Atlas. Certifique-se de que sua cadeia de conexão inclui as credenciais do usuário do banco de dados. Para saber mais, consulte Conectar via Drivers.

3
python partial-match-query.py
{
'plot': "A divorced woman and her diabetic daughter take refuge in their newly-purchased house's safe room, when three men break-in, searching for a missing fortune.",
'title': 'Panic Room',
'highlights': [{
'score': 4.364492893218994,
'path': 'plot',
'texts': [
{'value': 'A divorced woman and her diabetic daughter take refuge in their ', 'type': 'text'},
{'value': "newly-purchased house's safe", 'type': 'hit'},
{'value': ' room, when three men break-in, searching for a missing fortune.', 'type': 'text'}
]
}]
}
{
'plot': "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
'title': 'Her',
'highlights': [{
'score': 4.198050022125244,
'path': 'plot',
'texts': [
{'value': 'A lonely writer develops an unlikely relationship with his ', 'type': 'text'},
{'value': 'newly purchased operating system', 'type': 'hit'},
{'value': " that's designed to meet his every ", 'type': 'text'},
{'value': 'need', 'type': 'hit'},
{'value': '.', 'type': 'text'}
]
}]
}
{
'plot': "Set in the near future when artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has purchased. He must therefore go on the run before said ticker is repossessed.",
'title': 'Repo Men',
'highlights': [{
'score': 2.6448397636413574,
'path': 'plot',
'texts': [
{'value': 'Set in the ', 'type': 'text'},
{'value': 'near future when', 'type': 'hit'},
{'value': ' artificial organs can be bought on credit, it revolves around a man who struggles to make the payments on a heart he has ', 'type': 'text'},
{'value': 'purchased. He must', 'type': 'hit'}
]
}]
}
{
'plot': 'A psychologically troubled novelty supplier is nudged towards a romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and purchasing stunning amounts of pudding.',
'title': 'Punch-Drunk Love',
'highlights': [{
'score': 1.2451990842819214,
'path': 'plot',
'texts': [
{'value': 'A psychologically troubled ', 'type': 'text'},
{'value': 'novelty supplier is', 'type': 'hit'},
{'value': ' ', 'type': 'text'},
{'value': 'nudged towards a', 'type': 'hit'},
{'value': ' romance with an English woman, all the while being extorted by a phone-sex line run by a crooked mattress salesman, and ', 'type': 'text'},
{'value': 'purchasing stunning amounts', 'type': 'hit'},
{'value': ' of pudding.', 'type': 'text'}
]
}]
}
{
'plot': 'Jack Conrad is awaiting the death penalty in a corrupt Central American prison. He is "purchased" by a wealthy television producer and taken to a desolate island where he must fight to the death against nine other condemned killers from all corners of the world, with freedom going to the sole survivor.',
'title': 'The Condemned',
'highlights': [{
'score': 2.94378924369812,
'path': 'plot',
'texts': [
{'value': 'He is "', 'type': 'text'},
{'value': 'purchased" by a', 'type': 'hit'},
{'value': ' wealthy television producer and taken to a desolate island where he must fight to the death against ', 'type': 'text'},
{'value': 'nine other condemned', 'type': 'hit'},
{'value': ' killers from all corners of the world, with freedom going to the sole survivor.', 'type': 'text'}
]
}]
}
python partial-match-query.py
{
'plot': 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.',
'title': 'Music Within',
'highlights': [{
'score': 1.9394469261169434,
'path': 'plot',
'texts': [
{'value': 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a ', 'type': 'text'},
{'value': 'new', 'type': 'hit'},
{'value': ' ', 'type': 'text'},
{'value': 'purpose', 'type': 'hit'},
{'value': ' in his landmark efforts on the behalf of Americans with disabilities.', 'type': 'text'}
]
}]
}
{
'plot': 'The supervillain Megamind finally defeats his nemesis, the superhero Metro Man. But without a hero, he loses all purpose and must find new meaning to his life.',
'title': 'Megamind',
'highlights': [{
'score': 2.90376877784729,
'path': 'plot',
'texts': [
{'value': 'But without a hero, he loses all ', 'type': 'text'},
{'value': 'purpose', 'type': 'hit'},
{'value': ' and must find ', 'type': 'text'},
{'value': 'new', 'type': 'hit'},
{'value': ' meaning to his life.', 'type': 'text'}
]
}]
}
{
'plot': 'An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy New Mexico cattle barons--his sole purpose being to bring down his old friend Billy the Kid.',
'title': 'Pat Garrett & Billy the Kid',
'highlights': [{
'score': 2.115748405456543,
'path': 'plot',
'texts': [
{'value': 'An aging Pat Garrett is hired as a lawman on behalf of a group of wealthy ', 'type': 'text'},
{'value': 'New', 'type': 'hit'},
{'value': ' Mexico cattle barons--his sole ', 'type': 'text'},
{'value': 'purpose', 'type': 'hit'},
{'value': ' being to bring down his old friend Billy the Kid.', 'type': 'text'}
]
}]
}
python partial-match-query.py
{
'plot': 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.',
'title': 'Star Wars: Episode V - The Empire Strikes Back'
}
{
'plot': "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.",
'title': 'Major League'
}
{
'plot': 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.',
'title': 'Music Within'
}
{
'plot': "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
'title': 'Her'
}
{
'plot': 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.',
'title': 'Kick'
}
python partial-match-query.py
{
'plot': 'After the rebels have been brutally overpowered by the Empire on their newly established base, Luke Skywalker takes advanced Jedi training with Master Yoda, while his friends are pursued by Darth Vader as part of his plan to capture Luke.',
'title': 'Star Wars: Episode V - The Empire Strikes Back'
}
{
'plot': "The new owner of the Cleveland Indians puts together a purposely horrible team so they'll lose and she can move the team. But when the plot is uncovered, they start winning just to spite her.",
'title': 'Major League'
}
{
'plot': 'The true story of Richard Pimentel, a brilliant public speaker with a troubled past, who returns from Vietnam severely hearing -impaired and finds a new purpose in his landmark efforts on the behalf of Americans with disabilities.',
'title': 'Music Within'
}
{
'plot': "A lonely writer develops an unlikely relationship with his newly purchased operating system that's designed to meet his every need.",
'title': 'Her'
}
{
'plot': 'An adrenaline junkie walks away from a whirlwind romance and embraces a new life as a thief, though he soon finds himself pursued by veteran police officer and engaged in a turf war with a local gangster.',
'title': 'Kick'
}

Voltar

Multilíngue

Próximo

Entre coleções