Definição
O operador text executa uma pesquisa de texto completo usando o analyzer que você especificar na configuração de índice. Se você omitir um analyzer, o operador text utilizará o analisador padrão.
Você pode usar o operador text para pesquisar correspondências exatas com termos de palavra única.
Sintaxe
text tem a seguinte sintaxe:
{ $search: { "index": <index name>, // optional, defaults to "default" "text": { "query": "<search-string>", "path": "<field-to-search>", "fuzzy": <options>, "matchCriteria": "any" | "all" "score": <options>, "synonyms": "<synonyms-mapping-name>" } } }
Opções
text usa os seguintes termos para construir uma consulta:
Campo | Tipo | Descrição | necessidade |
|---|---|---|---|
| cadeia de caracteres ou matriz de cadeias de caracteres | A string ou strings para pesquisar. Se houver vários termos em uma string, o MongoDB Search também procurará uma correspondência para cada termo na string separadamente. | Obrigatório |
| cadeia de caracteres ou matriz de cadeias de caracteres | O campo ou campos indexados a serem pesquisados. Você também pode especificar um caminho curinga para pesquisar. | Obrigatório |
| documento | Ative a procurar difusa. Encontre strings semelhantes ao termo ou termos de pesquisa. Você não pode usar | Opcional |
| inteiro | Número máximo de edições de um único caractere necessárias para corresponder ao termo de pesquisa especificado. O valor pode ser | Opcional |
| inteiro | Número de caracteres no início de cada termo no resultado que deve corresponder exatamente. O valor padrão é | Opcional |
| inteiro | Número máximo de variações para gerar e pesquisar. Este limite se aplica por token. O valor padrão é | Opcional |
| string | Critérios a serem usados para corresponder aos termos na query. Se omitido, o padrão é
| Opcional, recomendado |
| documento | Pontuação atribuída aos resultados correspondentes do termo de pesquisa. Use uma das opções seguintes para modificar a pontuação:
Ao executar query de valores de array, o MongoDB Pesquisa atribui pontuações mais altas se mais valores na array corresponderem à query. | Opcional |
| string | Obrigatório para executar queries usando sinônimos. Nome da definição de mapeamento de sinônimos na definição do índice. O valor não pode ser uma string vazia. Não é possível usar IMPORTANTE: para utilizar a Sempre use O tempo que o MongoDB Search leva para executar queries que usam mapeamentos de sinônimos depende do número e do tamanho dos documentos na collection de fontes de sinônimos. Uma query que usa um mapeamento de sinônimos baseado em pouquíssimos documentos sinônimos pode ser mais rápida do que uma query que usa um mapeamento de sinônimos baseado em muitos documentos sinônimos. | Opcional |
Comportamento de pontuação
By default, the text operator uses the bm25 similarity algorithm to score documents depending on their relevance to the 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.
Comportamento
Para queries do text que usam synonyms sem matchCriteria, a Pesquisa MongoDB corresponde apenas a documentos que contêm uma correspondência exata dos termos da query (com ou sem os sinônimos expandidos).
Esse comportamento pode mudar no futuro e os resultados da sua query também podem mudar. Para evitar interrupções no serviço, sempre utilize matchCriteria ao utilizar synonyms. Ou use sinônimos com o operador phrase.
Por exemplo, suponha mapeamentos de sinônimos equivalentes para nyc e new york city. Uma pesquisa por i like nyc retorna o seguinte:
Especificação do Operador | Comportamento padrão | "matchCriteria": "any" | "matchCriteria": "all" |
|---|---|---|---|
| Corresponde a | Corresponde a | Corresponde |
| Corresponde a | Corresponde a | Corresponde |
O tempo que o MongoDB Search leva para executar queries que usam mapeamentos de sinônimos depende do número e do tamanho dos documentos na collection de fontes de sinônimos. Uma query que usa um mapeamento de sinônimos baseado em pouquíssimos documentos sinônimos pode ser mais rápida do que uma query que usa um mapeamento de sinônimos baseado em muitos documentos sinônimos.
Exemplos
The examples in this page use the movies collection in the sample_mflix database. After loading the sample dataset into your cluster, create the MongoDB Search index with dynamic mappings and run the example queries on your cluster. You must also define a synonyms mapping collection in the index as shown in the Index Definition Examples to try the synonyms examples below.
Exemplo básico
The following MongoDB Search query uses the text operator to search the title field in the movies collection for the term surfer. It includes a $project stage to:
Excluir todos os campos, exceto
titleAdicione um campo chamado
score
db.movies.aggregate([ { $search: { "text": { "path": "title", "query": "surfer" } } }, { $project: { "_id": 0, "title": 1, score: { $meta: "searchScore" } } } ])
Exemplo de metadados
A query a seguir procura o campo title para o termo summer. Utiliza o estágio $searchMeta para recuperar o número de filmes nos seguintes blocos (anos) que correspondem aos critérios de pesquisa:
1970, limite inferior inclusivo para este bucket
1980, limite superior exclusivo para o bucket 1970 e limite inferior inclusivo para esse bucket
1990, limite superior exclusivo para o bucket 1980 e limite inferior inclusivo para esse bucket
2000, limite superior exclusivo para o bucket 1990 e limite inferior inclusivo para esse bucket
2010, limite superior exclusivo para o bucket 2000 e limite inferior inclusivo para esse bucket
2015, limite superior exclusivo para o bucket 2010
db.movies.aggregate([ { "$searchMeta": { "facet": { "operator": { "text": { "path": "title", "query": "summer" } }, "facets": { "yearFacet": { "type": "number", "path": "year", "boundaries": [1970, 1980, 1990, 2000, 2010, 2020 ] } } } } } ])
Exemplos de Fuzzy
As queries a seguir usam o operador text para pesquisar o campo title na collection movies para os termos que estão dentro de uma variação de caractere de cada termo na frase query naw yark. A Pesquisa do MongoDB retorna resultados diferentes dependendo se você usa as opções fuzzy padrão ou define os campos maxExpansions, prefixLength ou maxEdits.
Clique nas abas a seguir para ver exemplos de query que usam opções padrão e especificadas:
A query a seguir procura no campo title a frase naw yark. Ela usa as opções padrão do fuzzy, nas quais:
maxEditspermite uma variação de até dois caracteres de cada termo na frase fornecida para corresponder a query a um documento.maxExpansionsconsidera até cinquenta termos semelhantes para cada termo emnaw yarkpara encontrar correspondências.prefixLengthestá desativado.
The query also includes a $limit stage to limit the output to 10 results and a $project stage to:
Excluir todos os campos, exceto
titleAdicione um campo chamado
score
db.movies.aggregate([ { $search: { "text": { "path": "title", "query": "naw yark", "fuzzy": {} } } }, { $limit: 10 }, { $project: { "_id": 0, "title": 1, score: { $meta: "searchScore" } } } ])
A query a seguir pesquisa no campo title termos que estão dentro de um caractere de cada termo na string naw yark. Ele usa:
O campo
maxEditspara indicar que somente uma variação de caractere é permitida para cada termo para corresponder a query a um documento.O campo
maxExpansionspara indicar que até cem termos semelhantes paranawe cem termos semelhantes ayarkdevem ser considerados ao associar a query a um documento.
The query also includes a $limit stage to limit the output to 10 results and a $project stage to:
Excluir todos os campos, exceto
titleAdicione um campo chamado
score
db.movies.aggregate([ { $search: { "text": { "path": "title", "query": "naw yark", "fuzzy": { "maxEdits": 1, "maxExpansions": 100, } } } }, { $limit: 10 }, { $project: { "_id": 0, "title": 1, score: { $meta: "searchScore" } } } ])
A query a seguir pesquisa no campo title termos que estão dentro de um caractere de cada termo na string naw yark. Ele usa:
O campo
maxEditspara indicar que somente uma variação de caractere é permitida para corresponder a query a um documento.O campo
prefixLengthpara indicar que os dois primeiros caracteres de cada termo na stringnaw yarknão podem ser alterados para corresponder a query a um documento.
The query also includes a $limit stage to limit the output to 8 results and a $project stage to:
Excluir todos os campos, exceto
_idetitleAdicione um campo chamado
score
db.movies.aggregate([ { $search: { "text": { "path": "title", "query": "naw yark", "fuzzy": { "maxEdits": 1, "prefixLength": 2, } } } }, { $limit: 8 }, { $project: { "_id": 1, "title": 1, score: { $meta: "searchScore" } } } ])
corresponder all
A consulta a seguir usa o operador text para pesquisar o campo plot na coleção movies para todos os termos na string de consulta automobile race.
db.movies.aggregate([ { "$search": { "text": { "path": "plot", "query": "automobile race", "matchCriteria": "all" } } }, { "$limit": 20 }, { "$project": { "_id": 0, "plot": 1, "title": 1, "score": { "$meta": "searchScore" } } } ])
[ { plot: 'A young driver, Speed Racer, aspires to be champion of the racing world with the help of his family and his high-tech Mach 5 automobile.', title: 'Speed Racer', score: 6.122188568115234 }, { plot: 'A gorgeous young automobile fanatic--and front to the hottest unsigned band on the West coast--finds herself caught up in illegal drag-racing competitions organized by exotic car fanatics.', title: 'Redline', score: 5.497724533081055 }, { plot: 'When a popular daredevil proposes an automobile race across three continents, his arch rival vows to beat him, while an ambitious female reporter has her own plans for victory.', title: 'The Great Race', score: 5.282209396362305 } ]
O MongoDB Search retorna documentos que contêm os termos automobile e race em qualquer lugar no campo plot.
Exemplos de Sinônimos
Os exemplos seguintes utilizam o operador text para pesquisar o campo plot no namespace do sample_mflix.movies. A Pesquisa do MongoDB retorna resultados com base no tipo de mapeamento na coleção de origem de sinônimos, synonymous_terms, especificado na definição de mapeamento de sinônimos do índice para a coleção sample_mflix.movies.
Corresponda any usando o mapeamento equivalent
A query a seguir procura no campo plot a frase attire. Ela usa o mapeamento de sinônimos chamado mySynonyms no índice da collection para também procurar palavras configuradas para serem sinônimos da palavra dress.
db.movies.aggregate([ { "$search": { "text": { "path": "plot", "query": "attire", "synonyms": "my_synonyms", "matchCriteria": "any" } } }, { "$limit": 5 }, { "$project": { "_id": 0, "plot": 1, "title": 1, "score": { "$meta": "searchScore" } } } ])
A Pesquisa do MongoDB retorna os documentos que contêm os termos attire, apparel e dress porque configuramos todos esses termos para serem equivalent sinônimo na coleção de fontes de sinônimos, synonymous_terms, o que média que todos esses termos são sinônimos um do outro. Portanto, o MongoDB Search retorna documentos semelhantes para pesquisas em dress e attire.
Corresponda any usando o mapeamento explicit
A query a seguir pesquisa no campo plot a frase boat race. Ele usa o mapeamento de sinônimos chamado my_synonyms no índice da coleção para também pesquisar palavras configuradas para serem sinônimos das palavras boat e race.
db.movies.aggregate([ { "$search": { "text": { "path": "plot", "query": "boat race", "synonyms": "my_synonyms", "matchCriteria": "any" } } }, { "$limit": 10 }, { "$project": { "_id": 0, "plot": 1, "title": 1, "score": { "$meta": "searchScore" } } } ])
A Pesquisa do MongoDB retorna documentos que contêm o termo boat, vessel, ou sail, ou race, rally ou contest porque configuramos boat para ser um sinônimo explicit ou vessel e sail e configuramos race para ser um sinônimo explicit de rally e contest. O MongoDB Search não retorna quaisquer resultados para uma query no vessel e sail ou rally e contest, pois não configuramos estas palavras para considerar qualquer uma das outras palavras como sinônimos.
Corresponda all usando sinônimos
A query a seguir usa o operador text para pesquisar o campo plot na coleção movies para todos os termos na string de query automobile race.
A Pesquisa do MongoDB retorna resultados com base no tipo de mapeamento na coleção de origem de sinônimos, synonymous_terms, especificado na definição de mapeamento de sinônimos do índice para a coleção sample_mflix.movies.
db.movies.aggregate([ { "$search": { "text": { "path": "plot", "query": "automobile race", "matchCriteria": "all", "synonyms": "my_synonyms" } } }, { "$limit": 20 }, { "$project": { "_id": 0, "plot": 1, "title": 1, "score": { "$meta": "searchScore" } } } ])
A Pesquisa do MongoDB retorna documentos que contêm os termos de consulta automobile, car ou vehicle e race, context ou rally porque configuramos automobile, vehicle e car para seja equivalent sinônimos e configuramos rally e contest para serem explicit sinônimos de race na coleção synonymous_terms.