Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

queryString Operador

queryString

O operador queryString suporta fazer uma query de uma combinação de campos e valores indexados. Você pode executar pesquisas de texto, curinga, expressão regular, difusa e intervalo em campos do string utilizando o operador queryString.

queryString tem a seguinte sintaxe:

1{
2 "$search": {
3 "index": <index name>, // optional, defaults to "default"
4 "queryString": {
5 "defaultPath": "<default-field-to-search>",
6 "query": "(<field-to-search>: (<search-values>) AND|OR (<search-values>)) AND|OR (<search-values>)"
7 }
8 }
9}

queryString usa os seguintes termos para construir uma consulta:

Campo
Tipo
Descrição
necessidade

defaultPath

string

O campo indexado para pesquisar por padrão. O MongoDB Search pesquisa somente o campo no defaultPath se você omitir o campo para pesquisar no query.

sim

query

string

Um ou mais campos e valores indexados para pesquisar. Campos e valores são delimitados por ponto e vírgula. Por exemplo, para pesquisar o campo plot para a string baseball, use plot:baseball. Os seguintes operadores estão disponíveis para combinar vários critérios de pesquisa:

Você pode combinar os campos e valores utilizando o seguinte:

  • ANDIndica o operador booleano AND. Todos os valores de pesquisa devem estar presentes para que um documento seja incluído nos resultados.

  • ORIndica o operador booleano OR. Pelo menos um dos valores de pesquisa deve estar presente para que um documento seja incluído nos resultados.

  • NOTIndica o operador booleano NOT. O valor de pesquisa especificado deve estar ausente para que um documento seja incluído nos resultados.

  • TO: Indica a faixa a ser pesquisada. Você pode usar o(a) [] para uma faixa inclusiva, o(a) {} para uma faixa exclusiva ou o(a) {] e o(a) [} para uma faixa meio aberta. Qualquer valor que caia dentro da faixa especificada deve estar presente para que um documento seja incluído nos resultados.

  • (): Delimitadores para subqueries. Use os parênteses para agrupar campos e valores para pesquisar.

Você pode executar queries de expressão regular e curinga utilizando o seguinte:

  • ?: Indica a correspondência de qualquer caractere individual.

  • *: Indica 0 ou mais caracteres para corresponder.

    O operador queryString não suporta uma query curinga com * como o primeiro caractere na query. O operador queryString trata qualquer caractere que antecede o * como prefixo ou como caracteres que devem corresponder exatamente.

  • /Delimitador para expressão regular.

  • ~: Indica a pesquisa difusa para encontrar strings semelhantes ao termo de pesquisa até o número especificado de edições. Por exemplo, { "query":"foo":"stop"~2 } é igual ao seguinte:

    { "defaultPath": "foo", "query": "stop", "maxEdits": 2 }

    O operador queryString só oferece suporte à pesquisa difusa para até 2 edições, no máximo. Distâncias maiores não são úteis, pois os resultados podem corresponder a muitos termos do dicionário.

    Se você usar ~ com vários termos em uma string, o operador queryString fará uma pesquisa de proximidade para os termos dentro do número especificado de termos. Por exemplo, { "query":"foo":"New York"~2 } é igual ao seguinte:

    { "defaultPath": "foo", "query": "New York", "slop": 2 }

sim

score

objeto

A pontuação atribuída aos resultados de pesquisa correspondentes. Você pode modificar a pontuação padrão usando as seguintes opções:

  • boost: multiplique a pontuação do resultado pelo número fornecido.

  • constant: substitui a pontuação do resultado pelo número fornecido.

  • function: substitua a pontuação do resultado pela expressão fornecida.

Ao executar query de valores de array, o MongoDB Pesquisa atribui pontuações mais altas se mais valores na array corresponderem à query.

Para obter informações sobre como utilizar o score em sua consulta, consulte Classificar os documentos nos resultados.

no

Como padrão, o operador texto utiliza o algoritmo de similaridade bm25 para pontuar documentos conforme sua relevância para a query.

Você pode alterar qual algoritmo de similaridade é usado especificando um algoritmo de similaridade diferente na propriedade similarity.type para os campos string na sua definição de índice do MongoDB Search. Para aprender a configurar um índice do MongoDB Search para o tipo string, consulte Como indexar campos de string.

Para saber mais sobre os algoritmos de similaridade aceitos, consulte Detalhes da pontuação.

The following examples use the movies collection in the sample_mflix database. If you have the sample dataset on your cluster , you can create the MongoDB Search index named default with dynamic mappings and run the example queries on your cluster.

The following example uses the queryString operator to query for movies with the title Rocky and either IV, 4, or Four at path title in the movies collection. In the following query, a field is specified in the defaultPath, but no fields are specified in the query. The query includes a $project stage to exclude all fields except title.

1db.movies.aggregate([
2 {
3 $search: {
4 "queryString": {
5 "defaultPath": "title",
6 "query": "Rocky AND (IV OR 4 OR Four)"
7 }
8 }
9 },
10 {
11 $project: {
12 "_id": 0,
13 "title": 1
14 }
15 }
16])

Para esta consulta, o MongoDB Search executa uma pesquisa no defaultPath porque não há campos no query. Retorna os seguintes resultados:

{ "title" : "Rocky IV" }

Os exemplos nesta seção usam o operador queryString para consultar enredos de filmes que contêm os termos captain, kirk e chess. Este exemplo mostra como o agrupamento diferente dos mesmos termos de pesquisa usando parênteses pode resultar em documentos diferentes a serem incluídos nos resultados da pesquisa.

The queries also includes a $project stage to:

  • Exclua todos os campos, exceto title, plot e fullpath

  • Adicione um campo chamado score

A consulta a seguir procura chess e captain ou kirk no campo plot .

1db.movies.aggregate([
2 {
3 $search: {
4 "queryString": {
5 "defaultPath": "fullplot",
6 "query": "plot:(captain OR kirk) AND chess"
7 }
8 }
9 },
10 {
11 $project: {
12 "_id": 0,
13 "title": 1,
14 "plot": 1,
15 "fullplot": 1,
16 score: { $meta: "searchScore" }
17 }
18 }
19])
{
"fullplot" : "When the crew of the Enterprise is called back home, they find an unstoppable force of terror from within their own organization has detonated the fleet and everything it stands for, leaving our world in a state of crisis. With a personal score to settle, Captain Kirk leads a manhunt to a war-zone world to capture a one-man weapon of mass destruction. As our heroes are propelled into an epic chess game of life and death, love will be challenged, friendships will be torn apart, and sacrifices must be made for the only family Kirk has left: his crew.",
"plot" : "After the crew of the Enterprise find an unstoppable force of terror from within their own organization, Captain Kirk leads a manhunt to a war-zone world to capture a one-man weapon of mass destruction.",
"title" : "Star Trek Into Darkness",
"score" : 7.968792915344238
}

O documento nos resultados é uma correspondência porque o plot contém os termos captain e kirk, embora apenas um seja necessário para atender aos critérios para uma correspondência, e o termo chess, embora não esteja no plot, aparece no fullplot, que é o defaultPath.

O exemplo a seguir usa o operador queryString para consultar os títulos de filme um intervalo de valores textuais dos caracteres count para qualquer caractere (definido usando o caractere curinga *) em ordem alfabética crescente.

1db.movies.aggregate([
2 {
3 "$search": {
4 "queryString": {
5 "defaultPath": "plot",
6 "query": "title:[count TO *]"
7 }
8 }
9 },
10 {
11 "$limit": 10
12 },
13 {
14 "$project": {
15 "_id": 0,
16 "title": 1
17 }
18 }
19])
1[
2 { title: 'Blacksmith Scene' },
3 { title: 'The Great Train Robbery' },
4 { title: 'The Land Beyond the Sunset' },
5 { title: 'A Corner in Wheat' },
6 { title: 'Winsor McCay, the Famous Cartoonist of the N.Y. Herald and His Moving Comics' },
7 { title: 'Traffic in Souls' },
8 { title: 'Gertie the Dinosaur' },
9 { title: 'In the Land of the Head Hunters' },
10 { title: 'The Perils of Pauline' },
11 { title: 'The Birth of a Nation' }
12]

Os resultados do MongoDB Search incluem filmes com títulos Blacksmith Scene e A Corner in Wheat, embora o intervalo na consulta comece com os caracteres count. Quando você indexa com o analisador padrão, lucene.standard, o MongoDB Search cria tokens separados para os termos no campo title e faz a correspondência entre o termo da consulta e os tokens individuais. Especificamente, o MongoDB Search cria os seguintes tokens, dos quais pelo menos um (indicado por √) corresponde aos critérios de consulta:

Título
Tokens de analisador padrão

Cena de ferreiro

blacksmith, scene √

Um Cantinho no Trigo

a, corner, in, wheat √

Se você indexar usando o analisador lucene.keyword, o MongoDB Search criará um único token para toda a cadeia de caracteres no campo title, resultando em resultados semelhantes aos seguintes para a mesma consulta:

[
{ title: 'è Nous la Libertè' },
{ title: 'tom thumb' },
{ title: 'è nos amours' },
{ title: 'èke och hans vèrld' },
{ title: 'èdipussi' },
{ title: 's/y Glèdjen' },
{ title: 'èAy, Carmela!' },
{ title: 'èlisa' },
{ title: 'èxtasis' },
{ title: 'eXistenZ' }
]

The following examples use the queryString operator to query for movie titles using fuzzy, wildcard, and regular expressions. The queries include a $project stage to exclude all fields except title.

A consulta a seguir usa fuzzy (~) para fazer uma pesquisa fuzzy no campo title para títulos de filmes que contêm termos semelhantes a catch com uma variação de até dois caracteres.

1db.movies.aggregate([
2 {
3 "$search": {
4 "queryString": {
5 "defaultPath": "title",
6 "query": "catch~2"
7 }
8 }
9 },
10 {
11 "$limit": 10
12 },
13 {
14 "$project": {
15 "_id": 0,
16 "title": 1
17 }
18 }
19])
1[
2 { title: 'Catch-22' },
3 { title: 'Catch That Girl' },
4 { title: 'Catch That Kid' },
5 { title: 'Catch a Fire' },
6 { title: 'Catch Me Daddy' },
7 { title: 'Death Watch' },
8 { title: 'Patch Adams' },
9 { title: "Batch '81" },
10 { title: 'Briar Patch' },
11 { title: 'Night Watch' }
12]

A query a seguir pesquisa o campo title na coleção movies por Marvel, Avengers, Iron Man ou Captain America.

A query a seguir retorna filmes nos seguintes intervalos de anos que correspondem aos critérios de pesquisa:

  • 2000, limite inferior inclusivo para este bucket

  • 2005, limite superior exclusivo para o bucket 2000 e limite inferior inclusivo para esse bucket

  • 2010, limite superior exclusivo para o bucket 2005 e limite inferior inclusivo para esse bucket

  • 2015, limite superior exclusivo para o bucket 2010 e limite inferior inclusivo para esse bucket

  • 2020, limite superior exclusivo para o bucket 2015

1db.movies.aggregate([
2 {
3 "$searchMeta": {
4 "facet": {
5 "operator": {
6 "queryString": {
7 "defaultPath": "title",
8 "query": "\"Marvel\" OR \"Avengers\" OR \"Iron Man\" OR \"Captain America\""
9 }
10 },
11 "facets": {
12 "yearFacet": {
13 "type": "number",
14 "path": "year",
15 "boundaries": [1990, 2000, 2005, 2010, 2015, 2020 ]
16 }
17 }
18 }
19 }
20 }
21])