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

extensão

Nesta página

  • Definição
  • Sintaxe
  • operador de termo
  • Sintaxe
  • Campos
  • Operadores posicionais
  • contains
  • first
  • near
  • or
  • subtract

Observação

O operador span está obsoleto. Em vez disso, use o operador defrase .

span

O operador span encontra correspondências no Atlas Search de texto em regiões de um campo de texto. Você pode usá-lo para encontrar strings próximas umas das outras com graus de precisão especificados. O operador span é mais intensivo em termos de computação do que os outros operadores, pois as queries devem manter o controle das informações de posição.

span é um operador de nível de termo, o que significa que o campo query não é analisado. Os operadores de nível de termo funcionam bem com o analisador de Palavras-chave porque o campo query é tratado como um único termo, com caracteres especiais incluídos.

span as queries não são classificadas por pontuação.

span tem a seguinte sintaxe:

{
$search: {
"index": <index name>, // optional, defaults to "default"
"span": {
"term" | <positional-operator>": {
<operator-specification>
}
}
}
}

Observação

span consultas de pesquisa não podem usar o operador composto .

Você pode utilizar o operador term para especificar os termos para Atlas Search. O operador term é obrigatório e, quando você o usa com operadoresposicionais span , ele deve ser o filho mais próximo dos operadores posicionais.

O operador term tem a seguinte sintaxe:

"term": {
"path": "<path-to-field>",
"query": "<terms-to-search>"
}

O operador term utiliza os seguintes campos:

Opção
Tipo
Obrigatório?
Descrição
path
string
sim
Campo indexado para pesquisar.
query
string
sim
Termo ou frase para o Atlas Search.

Você pode utilizar os operadores posicionais para especificar a posição dos termos que deseja que o Atlas Search com o operador termo . Os operadores posicionais são do tipo document. Você deve especificar pelo menos um operador posicional em sua query de operador span . Os operadores posicionais podem pegar outros operadores posicionais span recursivamente.

Observação

Sobre os exemplos

Os exemplos nesta página utilizam a collection sample_mflix.movies . Se você carregar os dados de amostra e criar um índice dinâmico denominado default na collection de filmes , poderá executar as seguintes queries de amostra $search na collection. As queries de amostra usam o estágio $limit para limitar os resultados a 5 documentos, e o estágio $project para excluir todos os campos, exceto o campo title nos resultados.

span usa os seguintes operadores posicionais opcionais.

O operador posicional contains corresponde aos termos contidos em outros termos. Você pode usar operadores posicionais recursivamente ou apenas o operador de termo em contains para especificar os termos do Atlas Search .

O operador posicional contains tem a seguinte sintaxe:

{
"$search": {
"span": {
"contains": {
"spanToReturn": "inner"|"outer",
"little": { <positional-or-term-operator-specification> },
"big": { <positional-or-term-operator-specification> }
}
}
}
}

O operador posicional contains usa os seguintes campos:

Campos
Tipo
Obrigatório?
Descrição
big
documento
sim

Um ou mais operadores posicionais especificados recursivamente ou apenas o operador termo . A tabela a seguir mostra o tipo de query que span executa para big com base no valor de spanToReturn.

outer
span corresponde a termos de big que contêm pelo menos um termo de little.
inner
span corresponde aos termos de little que estão dentro dos termos de big.
little
documento
sim

Um ou mais operadores posicionais especificados recursivamente ou apenas o operador termo . A tabela a seguir mostra o tipo de query que span executa para little com base no valor de spanToReturn.

inner
span corresponde aos termos de little que estão dentro dos termos de big.
outer
span corresponde a termos de big que contêm pelo menos um termo de little.
score
documento
não
Pontuação a ser aplicada aos resultados deste Atlas Search.
spanToReturn
string
sim

Tipo de query para executar e resultados correspondentes para retornar. O valor pode ser um dos seguintes:

  • inner - para executar uma query que corresponda aos termos de little que estão dentro dos termos de big

  • outer - para executar uma query que corresponda a termos de big que contenham pelo menos um termo de little

A consulta de exemplo a seguir usa span.contains para localizar documentos nos quais o termo train aparece com os termos great e robbery, onde great e robbery podem ter até 5 posições de diferença no title Campo .

1db.movies.aggregate([
2 {
3 "$search": {
4 "span": {
5 "contains": {
6 "spanToReturn": "outer",
7 "little": {
8 "term": {
9 "path": "title",
10 "query": "train"
11 }
12 },
13 "big": {
14 "near": {
15 "clauses": [
16 {
17 "term": {
18 "path": "title",
19 "query": "great"
20 }
21 },
22 {
23 "term": {
24 "path": "title",
25 "query": "robbery"
26 }
27 }
28 ],
29 "slop": 5
30 }
31 }
32 }
33 }
34 }
35 },
36 {
37 "$limit": 5
38 },
39 {
40 "$project": {
41 "_id": 0,
42 "title": 1
43 }
44 }
45])
[
{ title: 'The Great Train Robbery' },
{ title: 'The Great Train Robbery' },
{ title: "The Great St. Trinian's Train Robbery" }
]

O Atlas Search retorna documentos que contêm o termo train (especificado usando little) dentro dos termos great e robbery (especificados usando big). Se você configurar spanToReturn na linha 6 para inner, o Atlas Search retornará os mesmos documentos porque o termo train (especificado utilizando little) aparece dentro dos termos great e robbery (especificados utilizando big).

O operador posicional first identifica a posição do termo do Atlas Search usando um número especificado. Você pode especificar os termos do Atlas Search usando operadores posicionais recursivamente ou apenas o operador de termos . span corresponde a documentos em que a posição do termo do Atlas Search é menor ou igual ao número especificado.

O operador posicional first tem a seguinte sintaxe:

{
"$search": {
"span": {
"first": {
"endPositionLte": <term-position>,
"operator": { <span-positional-or-term-operator-specification> },
"score": { <score-options> }
}
}
}
}

O operador posicional first usa os seguintes campos:

Opção
Tipo
Obrigatório?
Descrição
endPositionLte
int
não
Número que especifica a posição do termo do Atlas Search . Se você especificar um Atlas Search para vários termos, o último termo deverá ser menor ou igual a esse valor. Se omitido, o padrão é 3.
operator
documento
sim
Documento que contém os operadores posicionais ou opções de operador de termo .
score
documento
não
Pontuação a ser aplicada aos resultados deste Atlas Search.

As seguintes queries de exemplo utilizam span.first para encontrar documentos nos quais a string especificada aparece no campo title . O parâmetro endPositionLte tem um valor de 2, o que significa que o termo do Atlas Search especificado utilizando o operador term deve ser a primeira ou segunda palavra no campo.

1db.movies.aggregate([
2 {
3 "$search": {
4 "span": {
5 "first": {
6 "endPositionLte": 2,
7 "operator": {
8 "term": {
9 "path": "title",
10 "query": "dance"
11 }
12 }
13 }
14 }
15 }
16 },
17 {
18 "$limit": 5
19 },
20 {
21 "$project": {
22 "_id": 0,
23 "title": 1
24 }
25 }
26])
[
{ title: 'Dance Program' },
{ title: 'Slam Dance' },
{ title: 'Last Dance' },
{ title: 'War Dance' },
{ title: 'Delhi Dance' }
]

O Atlas Search retorna os documentos que contêm a palavra de pesquisa dance na primeira ou segunda posição do campo title .

1db.movies.aggregate([
2 {
3 "$search": {
4 "span": {
5 "first": {
6 "endPositionLte": 2,
7 "operator": {
8 "or": {
9 "clauses": [
10 { "term": { "path": "title", "query": "man" } },
11 { "term": { "path": "title", "query": "woman" } }
12 ]
13 }
14 }
15 }
16 }
17 }
18 },
19 {
20 "$limit": 5
21 },
22 {
23 "$project": {
24 "_id": 0,
25 "title": 1
26 }
27 }
28])
[
{ title: "Everybody's Woman" },
{ title: 'Marked Woman' },
{ title: 'Wonder Man' },
{ title: 'Designing Woman' },
{ title: 'Watermelon Man' }
]

O Atlas Search retorna documentos que contêm a palavra de pesquisa man ou woman na primeira ou segunda posição do title campo . O Atlas Search não retorna ambos os termos de pesquisa no mesmo title porque o exemplo inclui o or operador clauses para especificar os termos de pesquisa.

O operador posicional near corresponde a duas ou mais cláusulas que contêm o termo Atlas Search próximo uma da outra. Você pode especificar os termos do Atlas Search usando uma lista de operadores posicionais recursivamente ou apenas o operador de termo .

O operador posicional near tem a seguinte sintaxe:

{
"$search": {
"span": {
"near": {
"clauses": [
{ <span-positional-or-term-operator-specification> },
...
],
"slop": <distance-number>,
"inOrder": true|false
}
}
}
}

O operador posicional near usa os seguintes campos:

Campo
Tipo
Obrigatório?
Descrição
clauses
matriz de documentos
sim
Cláusulas de extensão que devem estar próximas umas das outras. As cláusulas não podem estar vazias. Cada documento contém span opções de operador posicional ou apenas as opções de termo .
inOrder
booleano
não

Sinalizador que especifica se o Atlas Search para termos nas cláusulas deve estar na ordem especificada e não deve estar sobreposto.

O valor pode ser um dos seguintes:

  • true - para Atlas Search termos nas cláusulas na ordem especificada especificada, sem sobreposição

  • false - para o Atlas Search termos nas cláusulas em qualquer ordem

Se omitido, o padrão é false.

score
documento
não
Pontuação a ser aplicada aos resultados deste Atlas Search.
slop
inteiro
não
Distância permitida entre os termos nas cláusulas. Valores mais baixos permitem uma distância posicional menor entre os termos e valores maiores permitem uma distância maior entre as palavras para satisfazer a query. O padrão é 0, o que significa que as palavras nas diferentes cláusulas devem ser adjacentes para serem consideradas correspondentes.

O exemplo de query a seguir usa span.near para o Atlas Search para documentos nos quais as strings prince e pauper são encontradas próximas uma da outra. O parâmetro inOrder é definido como false, para que os termos do Atlas Search possam estar em qualquer ordem. O parâmetro slop é definido como 4, de modo que os termos do Atlas Search possam ser separados por apenas 4 palavras.

1db.movies.aggregate([
2 {
3 "$search" : {
4 "span": {
5 "near": {
6 "clauses": [
7 { "term": { "path": "title", "query": "prince" } },
8 { "term": { "path": "title", "query": "pauper" } }
9 ],
10 "slop": 4,
11 "inOrder": false
12 }
13 }
14 }
15 },
16 {
17 "$limit": 5
18 },
19 {
20 "$project": {
21 "_id": 0,
22 "title": 1
23 }
24 }
25])
[ { title: 'The Prince and the Pauper' } ]

Atlas Search Atlas Search um documento que contém as palavras prince e pauper, separadas por menos de quatro palavras, no campo title.

O operador posicional or corresponde a qualquer uma de duas ou mais cláusulas. Você pode especificar os termos do Atlas Search usando uma lista de operadores posicionais recursivamente ou apenas o operador de termo .

O operador posicional or tem a seguinte sintaxe:

{
"$search": {
"span": {
"or": {
"clauses": [
{ <span-positional-or-term-operator-specification> },
...
],
"score": { <scoring-options> }
}
}
}
}

O operador posicional or usa os seguintes campos:

Opção
Tipo
Obrigatório?
Descrição
clauses
matriz de documentos
sim
Cláusulas span que especificam os termos do Atlas Search . Uma das cláusulas deve corresponder e as cláusulas não podem estar vazias. Cada documento deve conter span operadores posicionais especificados recursivamente ou apenas as opções do operador termo .
score
documento
não
Pontuação a ser aplicada aos resultados deste Atlas Search.

A query de exemplo a seguir usa cláusulas span.or para especificar duas queries de operador de termo que o Atlas Search para documentos nos quais o campo title tenha city ou country.

1db.movies.aggregate([
2 {
3 "$search" : {
4 "span": {
5 "or": {
6 "clauses": [
7 { "term": { "path": "title", "query": "city" } },
8 { "term": { "path": "title", "query": "country" } }
9 ],
10 }
11 }
12 }
13 },
14 {
15 "$limit": 5
16 },
17 {
18 "$project": {
19 "_id": 0,
20 "title": 1
21 }
22 }
23])
[
{ title: 'Country' },
{ title: 'City Lights' },
{ title: 'King & Country' },
{ title: 'Fat City' },
{ title: 'Atlantic City' }
]

O Atlas Search retorna os documentos que contêm as palavras city ou country do Atlas Search no campo title, mas não ambas no mesmo title.

O operador posicional subtract remove as correspondências que se sobrepõem com outra correspondência. Você pode especificar os termos do Atlas Search usando uma lista de operadores posicionais recursivamente ou apenas o operador de termo . A cláusula subtract pode ser usada para excluir determinadas strings dos seus resultados do Atlas Search .

O operador posicional subtract tem a seguinte sintaxe:

{
"$search": {
"span": {
"subtract": {
"include": { <span-positional-or-term-operator-specification> },
"exclude": { <span-positional-or-term-operator-specification> }
}
}
}
}

O operador posicional subtract usa os seguintes campos:

Opção
Tipo
Obrigatório?
Descrição
exclude
documento
sim
Documento que especifica as correspondências de termos ou frases para remover essa sobreposição com as correspondências de termos ou frases especificadas no campo include . Você pode especificar o termo ou frase usando quaisquer operadores posicionais de extensão e o operador de termo .
include
documento
sim
Documento que especifica as correspondências de termo para incluir o uso de quaisquer operadores posicionais ou apenas o operador do termo.
score
documento
não
Pontuação a ser aplicada aos resultados deste Atlas Search.

O exemplo de query a seguir usa span.subtract para o Atlas Search para documentos nos quais o campo title contém as palavras father e son, em qualquer ordem, dentro de 3 palavras uma da outra. Exclui qualquer documento no qual a palavra like ocorra entre father e son.

1db.movies.aggregate([
2 {
3 "$search" : {
4 "span": {
5 "subtract": {
6 "include": {
7 "near": {
8 "clauses": [
9 { "term": { "path": "title", "query": "father" } },
10 { "term": { "path": "title", "query": "son" } }
11 ],
12 "inOrder": false,
13 "slop": 3
14 }
15 },
16 "exclude": { "term": { "path": "title", "query": "like" } }
17 }
18 }
19 }
20 },
21 {
22 "$limit": 5
23 },
24 {
25 "$project": {
26 "_id": 0,
27 "title": 1
28 }
29 }
30])
[
{ title: 'Father, Son & Holy Cow' },
{ title: 'My Father and My Son' },
{ title: 'Jimmy Rosenberg: The Father, the Son & the Talent' }
]

O Atlas Search não retorna o documento com o título Like Father Like Son porque, embora o campo title inclua as palavras father e son, ele também tem like entre elas, que está nos critérios exclude de a query.

Voltar

regex

Próximo

texto