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

Realçar termos de pesquisa nos resultados

Nesta página

  • Sintaxe
  • Opções
  • Saída
  • Pré-requisitos
  • Limitações
  • Exemplos
  • Coleção de amostras
  • Índice de amostra
  • Exemplos de queries

A opção Atlas Search highlight adiciona campos ao conjunto de resultados que exibem os termos de pesquisa em seu contexto original. Você pode usá-lo em conjunto com todos os operadores $search para exibir os termos de pesquisa conforme eles aparecem nos documentos retornados, junto com o conteúdo de texto adjacente (se houver). Os resultados de highlight são retornados como parte do campo $meta.

highlight tem a seguinte sintaxe:

{
$search: {
"index": "<index name>", // optional, defaults to "default"
"<operator>": { // such as "text", "compound", or "phrase"
<operator-specification>
},
"highlight": {
"path": "<field-to-search>",
"maxCharsToExamine": "<number-of-chars-to-examine>", // optional, defaults to 500,000
"maxNumPassages": "<number-of-passages>" // optional, defaults to 5
}
}
},
{
$project: {
"highlights": { "$meta": "searchHighlights" }
}
}
Campo
Tipo
Descrição
Obrigatório?
path
string

Campo de documento a ser pesquisado. O campo path pode conter:

  • Um string

  • Um array de strings

  • Uma especificação de multianalisador

  • Uma array contendo uma combinação de strings e especificações de vários analisadores

  • Personagem curinga *

Para mais informações, consulte Construir um caminho de query.

sim
maxCharsToExamine
int
Número máximo de caracteres a serem examinados em um documento quando se está realçando um campo. Se omitido, o padrão é 500,000, o que significa que o Atlas Search examina apenas os primeiros 500.000 caracteres no campo de pesquisa em cada documento para realce.
Não
maxNumPassages
int
Número de passagens de alta pontuação para retornar por documento nos resultados highlights de cada campo. Uma passagem tem aproximadamente o comprimento de uma frase. Se omitido, o padrão é 5, o que significa que, para cada documento, o Atlas Search retorna as 5 passagens de maior pontuação que correspondem ao texto de pesquisa.
Não

O campo "$meta": "searchHighlights" contém os resultados realçados. Esse campo não faz parte do documento original, então é necessário usar um estágio de pipeline$project para adicioná-lo à saída da consulta.

O campo highlights é uma array contendo os seguintes campos de saída:

Campo
Tipo
Descrição
path
string
Campo de documento que retornou uma correspondência.
texts
matriz de documentos
Cada correspondência de pesquisa retorna um ou mais objetos, contendo o texto correspondente e o texto do entorno (se houver).
texts.value
string
Texto do campo que retornou uma correspondência.
texts.type
string

Tipo de resultado. O valor pode ser um dos seguintes:

  • hit - Os resultados contêm o termo correspondente à query.

  • text - Os resultados contêm o conteúdo de texto adjacente ao termo correspondente.

score
flutuar
Pontuação atribuída ao resultado correspondente. A pontuação highlights é uma medida da relevância do objeto highlights para a consulta. Se vários objetos highlights forem retornados, o objeto highlights mais relevante terá a pontuação mais alta.

Você deve indexar o campo que deseja realçar como um tipo de string do Atlas Search com indexOptions configurado como offsets (padrão).

Você não pode utilizar a opção highlight do Atlas Search em conjunto com o operador embeddedDocument.

Você pode tentar os seguintes exemplos no Atlas Search Playground ou no seu Atlas cluster.

Os exemplos nesta página usam uma collection chamada fruit que contém os seguintes documentos:

{
"_id" : 1,
"type" : "fruit",
"summary" : "Apple varieties",
"description" : "Apples come in several varieties, including Fuji, Granny Smith, and Honeycrisp. The most popular varieties are McIntosh, Gala, and Granny Smith.",
"category": "organic"
},
{
"_id" : 2,
"type" : "fruit",
"summary" : "Banana",
"description" : "Bananas are usually sold in bunches of five or six.",
"category": "nonorganic"
},
{
"_id" : 3,
"type" : "fruit",
"summary" : "Pear varieties",
"description" : "Bosc and Bartlett are the most common varieties of pears.",
"category": "nonorganic"
}

A coleção fruit também tem uma definição de índice que utiliza o analisador inglês e mapeamentos de campo dinâmicos.

{
"analyzer": "lucene.english",
"searchAnalyzer": "lucene.english",
"mappings": {
"dynamic": true
}
}

Observação

Um aspecto útil do realce é que ele revela o texto original que a query de pesquisa retornou, que pode não ser exatamente igual ao termo pesquisado. Por exemplo, se você usar um analisador específico de idioma, suas pesquisas de texto retornarão todos os derivados variações dos termos de pesquisa.

Outro aspecto útil do realce é que ele pode ser utilizado para realçar qualquer campo, dentro ou fora da query path. Por exemplo, ao pesquisar um termo, você pode executar o realce para o termo da query no campo da query e em quaisquer outros campos especificados usando a opção highlight . Para saber mais, consulte Exemplo de vários campos.

As seguintes queries demonstram a opção $search highlight nas queries do Atlas Search.

A seguinte query pesquisa variety e bunch no campo description da collection fruit com a opção highlight habilitada.

O estágio do pipeline $project restringe a saída ao campo description e adiciona um novo campo chamado highlights, que contém informações de destaque.

1db.fruit.aggregate([
2 {
3 $search: {
4 "text": {
5 "path": "description",
6 "query": ["variety", "bunch"]
7 },
8 "highlight": {
9 "path": "description"
10 }
11 }
12 },
13 {
14 $project: {
15 "description": 1,
16 "_id": 0,
17 "highlights": { "$meta": "searchHighlights" }
18 }
19 }
20])

O termo de pesquisa bunch retorna uma correspondência no documento com _id: 2, pois o campo description contém a palavra bunches. O termo de pesquisa variety retorna uma correspondência nos documentos com _id: 3 e _id: 1, pois o campo description contém a palavra varieties.

➤ Tente fazer isso no Atlas Search Playground.

A seguinte consulta pesquisa por variety e bunch no campo description da coleção fruit, com a opção highlight habilitada, número máximo de caracteres a ser examinado definido como 40 e somente 1 passagem de pontuação alta para retornar por documento.

O estágio do pipeline $project restringe a saída ao campo description e adiciona um novo campo chamado highlights, que contém informações de destaque.

1db.fruit.aggregate([
2 {
3 $search: {
4 "text": {
5 "path": "description",
6 "query": ["variety", "bunch"]
7 },
8 "highlight": {
9 "path": "description",
10 "maxNumPassages": 1,
11 "maxCharsToExamine": 40
12 }
13 }
14 },
15 {
16 $project: {
17 "description": 1,
18 "_id": 0,
19 "highlights": { "$meta": "searchHighlights" }
20 }
21 }
22])

O segundo documento nos resultados acima contém um array highlights vazio, embora o campo de pesquisa contenha o termo de pesquisa varieties porque o Atlas Search examinou apenas 40 caracteres para realce. Da mesma forma, a palavra includ é truncada porque o Atlas Search examinou apenas 40 caracteres no campo de pesquisa para realce. No terceiro documento, embora várias passagens contenham o termo de pesquisa, o Atlas Search retorna apenas uma passagem nos resultados dehighlights porque a query exigia apenas 1 passagem por documento nos resultados de highlights.

➤ Tente fazer isso no Atlas Search Playground.

A query a seguir pesquisa varieties no campo description da collection fruit, com a opção highlight habilitada para os campos description e summary.

O estágio do pipeline $project adiciona um novo campo chamado highlights, que contém informações de realce para o termo da query em todos os campos na opção highlight .

1db.fruit.aggregate([
2 {
3 $search: {
4 "text": {
5 "path": "description",
6 "query": "varieties"
7 },
8 "highlight": {
9 "path": ["description", "summary" ]
10 }
11 }
12 },
13 {
14 $project: {
15 "description": 1,
16 "summary": 1,
17 "_id": 0,
18 "highlights": { "$meta": "searchHighlights" }
19 }
20 }
21])

O termo de pesquisa varieties retorna uma correspondência em documentos com _id: 1 e _id: 3 porque o campo de consulta description em ambos os documentos contém o termo de consulta varieties. Além disso, a matriz highlights inclui o campo summary porque o campo contém o termo de consulta varieties.

➤ Tente fazer isso no Atlas Search Playground.

A query abaixo pesquisa o termo varieties em campos que começam com des na collection fruit, com a opção highlight habilitada para campos que começam com des.

O estágio do pipeline $project adiciona um novo campo chamado highlights, que contém informações de realce.

1db.fruit.aggregate([
2 {
3 "$search": {
4 "text": {
5 "path": {"wildcard": "des*"},
6 "query": ["variety"]
7 },
8 "highlight": {
9 "path": {"wildcard": "des*"}
10 }
11 }
12 },
13 {
14 "$project": {
15 "description": 1,
16 "_id": 0,
17 "highlights": { "$meta": "searchHighlights" }
18 }
19 }
20])

Nos resultados do Atlas Search, os campos que começam com des ficam em realce.

➤ Tente fazer isso no Atlas Search Playground.

A seguinte consulta procura o termo organic no campo category e variety no campo description. A opção highlight na consulta composta $searchsolicita informações de realce apenas para a consulta de texto em relação ao campo description. Observe que a opção highlight dentro do estágio $search deve ser filha do estágio $search, e não de qualquer operador dentro do estágio $search.

O estágio do pipeline $project adiciona um novo campo chamado highlights, que contém informações de realce.

1db.fruit.aggregate([
2 {
3 "$search": {
4 "compound": {
5 "should": [{
6 "text": {
7 "path": "category",
8 "query": "organic"
9 }
10 },
11 {
12 "text": {
13 "path": "description",
14 "query": "variety"
15 }
16 }]
17 },
18 "highlight": {
19 "path": "description"
20 }
21 }
22 },
23 {
24 "$project": {
25 "description": 1,
26 "category": 1,
27 "_id": 0,
28 "highlights": { "$meta": "searchHighlights" }
29 }
30 }
31])

➤ Tente fazer isso no Atlas Search Playground.

Neste exemplo, a collection fruit também tem a seguinte definição de índice.

{
"mappings": {
"dynamic": false,
"fields": {
"description": [
{
"type": "autocomplete",
"tokenization": "edgeGram",
"minGrams": 2,
"maxGrams": 15,
"foldDiacritics": true
}
]
}
}
}

A seguinte query procura os caracteres var no campo description da collection fruit, com a opção highlight habilitada para o campo description.

O estágio do pipeline $project adiciona um novo campo chamado highlights, que contém informações de realce.

Importante

Para destacar a versão indexada do preenchimento automático de um caminho, o operador de preenchimento automático deve ser o único operador que usa esse caminho na query.

1db.fruit.aggregate([
2 {
3 "$search": {
4 "autocomplete": {
5 "path": "description",
6 "query": ["var"]
7 },
8 "highlight": {
9 "path": "description"
10 }
11 }
12 },
13 {
14 "$project": {
15 "description": 1,
16 "_id": 0,
17 "highlights": { "$meta": "searchHighlights" }
18 }
19 }
20])

O Atlas Search retorna uma correspondência nos documentos com _id: 1 e id_: 2 para a string da query var porque o campo description na collection fruit contém os caracteres var no início de uma palavra. O Atlas Search corresponde um realce hit mais grosseiro para os termos da query quando um caminho realçado é referenciado apenas nos operadores com preenchimento automático da query realçada.

➤ Tente fazer isso no Atlas Search Playground.

← Paralelizar a execução de queries entre segmentos