Texto de pesquisa
Nesta página
Visão geral
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.
Documentos de amostra
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"] }
Text Index
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:
Seção Índices de texto do nosso guia de índices
Índices de texto Entrada manual do servidor
Pesquisa de texto
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 pesquisar de texto em todos os campo indexados com o índice de texto na collection. 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 pesquisar de texto em nosso guia Classificar resultados.
Especifique as opções
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:
Pesquisar texto por um termo
Passe um termo como uma string para o método Filters.text()
para especificar o termo na sua pesquisa de texto.
Exemplo
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.
Exemplo
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"] }
Pesquisar texto por frase
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.
Exemplo
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"] }
Pesquise por texto com termos excluídos
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.
Exemplo
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"] }