Menu Docs
Página inicial do Docs
/ / /
Java síncrono
/ / /

Texto de pesquisa

Nesta página

  • Visão geral
  • Documentos de amostra
  • Text Index
  • Pesquisa de texto
  • Especifique as opções
  • Pesquisar texto por um termo
  • Pesquisar texto por frase
  • Pesquise por texto com termos excluídos

Neste guia, você pode aprender como executar uma pesquisa de texto no driver Java do MongoDB.

Você pode usar uma pesquisa de texto para recuperar documentos que contêm um termo ou uma frase em um campo especificado. Um termo é uma sequência de caracteres que exclui caracteres de espaços em branco. Uma frase é uma sequência de termos com qualquer número de caracteres do espaço em branco.

As seções a seguir mostram como realizar os seguintes tipos de pesquisa de texto:

  • Pesquisar texto por um termo

  • Pesquisar texto por frase

  • Pesquise por texto com termos excluídos

Se quiser classificar os resultados da pesquisa de texto, consulte a seção Pesquisa de texto do nosso guia Classificar resultados.

As seções seguintes apresentam exemplos de pesquisas de texto na coleção fast_and_furious_movies. Cada seção usa uma variável chamada collection para fazer referência à instância MongoCollection da coleção fast_and_furious_movies.

A coleção fast_and_furious_movies contém documentos que descrevem um dos vários filmes que fazem parte da franquia de filmes Velozes e Furiosos. Cada documento contém um campo de título e um campo de tags.

{ "_id": 1, "title": "2 Fast 2 Furious ", "tags": ["undercover", "drug dealer"] }
{ "_id": 2, "title": "Fast 5", "tags": ["bank robbery", "full team"] }
{ "_id": 3, "title": "Furious 7", "tags": ["emotional"] }
{ "_id": 4, "title": "The Fate of the Furious", "tags": ["betrayal"] }

Você deve criar um índice de texto antes de executar uma pesquisa de texto. Um índice de texto especifica a string ou o campo de array de strings no qual executar uma pesquisa de texto.

Nos exemplos seguintes, você executa pesquisas de texto no campo title na coleção fast_and_furious_movies . Para habilitar pesquisas de texto no campo title, crie um índice de texto utilizando o construtor Índices com o seguinte trecho:

collection.createIndex(Indexes.text("title"));

Para obter mais informações, consulte os seguintes recursos:

Utilize o método Filters.text() para especificar uma pesquisa de texto.

O método Filters.text() utiliza o Construtor de Filtros para definir um filtro de consulta especificando o que procurar durante a pesquisa de texto. O filtro de consulta é representado por uma instância BSON. Passe o filtro de consulta para o método find() para executar uma pesquisa de texto.

Ao executar o método find(), MongoDB executa uma pesquisa de texto em todos os campos indexados com o índice de texto na coleção. O MongoDB retorna documentos que contêm um ou mais dos termos de pesquisa e uma pontuação de relevância para cada resultado. Para obter mais informações sobre pontuações de relevância, consulte a seção Pesquisa de texto em nosso guia Resultados de classificação.

Você pode incluir TextSearchOptions como o segundo parâmetro do método Filters.text() para especificar opções de pesquisa de texto como sensibilidade do caso. Por padrão, as pesquisas de texto são executadas sem distinção entre maiúsculas e minúsculas, o que significa que a pesquisa corresponde a valores em minúsculas e maiúsculas.

Para especificar uma pesquisa sensível a maiúsculas e minúsculas, use o seguinte trecho:

TextSearchOptions options = new TextSearchOptions().caseSensitive(true);
Bson filter = Filters.text("SomeText", options);

Para obter mais informações sobre os métodos e as classes mencionadas nesta seção, consulte a seguinte documentação da API:

Passe um termo como uma string para o método Filters.text() para especificar o termo na sua pesquisa de texto.

O exemplo a seguir executa uma pesquisa de texto nos documentos na coleção fast_and_furious_movies para títulos que contêm o termo "rápido":

Bson filter = Filters.text("fast");
collection.find(filter).forEach(doc -> System.out.println(doc.toJson()));

O seguinte mostra a saída do código anterior:

{ "_id": 1, "title": "2 Fast 2 Furious ", "tags": ["undercover", "drug dealer"] }
{ "_id": 2, "title": "Fast 5", "tags": ["bank robbery", "full team"] }

Para corresponder a vários termos em sua pesquisa de texto, separe cada termo com espaços no método de construtor do Filters.text(). O método de construtor devolve a consulta de pesquisa de texto como uma instância Bson . Quando você passa isso para o método find(), ele retorna documentos que correspondem a qualquer um dos termos.

O exemplo a seguir executa uma pesquisa de texto nos documentos na coleção fast_and_furious_movies para títulos que contêm os termos "fate" ou "7":

Bson filter = Filters.text("fate 7");
collection.find(filter).forEach(doc -> System.out.println(doc.toJson()));

O seguinte mostra a saída do código anterior:

{ "_id": 3, "title": "Furious 7", "tags": ["emotional"] }
{ "_id": 4, "title": "The Fate of the Furious", "tags": ["betrayal"] }

Passe uma frase com citações em forma de escape para o método Filters.text() para especificar a frase na sua pesquisa de texto. As aspas escapadas são caracteres de aspas duplas precedidos por um caractere de barra invertida. Se você não adicionar citações escapadas em torno da frase, o método find() executará uma pesquisa de termo.

O exemplo a seguir executa uma pesquisa de texto nos documentos da collection fast_and_furious_movies para títulos que contenham a frase "fate of the furious" (destino dos furiosos):

Bson filter = Filters.text("\"fate of the furious\"");
collection.find(filter).forEach(doc -> System.out.println(doc.toJson()));

O seguinte mostra a saída do código anterior:

{ "_id": 4, "title": "The Fate of the Furious", "tags": ["betrayal"] }

Para cada termo que você deseja excluir da pesquisa de texto, prefixe o termo com um sinal de subtração na string que você passa para o método construtor de Filters.text() .

Nenhum dos documentos devolvidos da pesquisa contém o termo excluído no campo de índice de texto.

Importante

Você deve ter pelo menos um termo de pesquisa de texto se quiser excluir os termos da sua pesquisa.

O exemplo a seguir executa uma pesquisa de texto nos documentos da coleção fast_and_furious_movies para títulos que contêm o termo " furious ", mas não contêm o termo "fast":

Bson filter = Filters.text("furious -fast");
collection.find(filter).forEach(doc -> System.out.println(doc.toJson()));

O seguinte mostra a saída do código anterior:

{ "_id": 3, "title": "Furious 7", "tags": ["emotional"] }
{ "_id": 4, "title": "The Fate of the Furious", "tags": ["betrayal"] }

Voltar

Pesquisar geoespacialmente