Menu Docs
Página inicial do Docs
/ / /
Mongoid
/

Texto de pesquisa

Nesta página

  • Visão geral
  • Definir um índice de texto em seu modelo
  • Criar o índice de texto
  • Realizar pesquisas de texto
  • Pesquisar por um termo
  • Pesquisar por frase
  • Pesquisar com Termos Excluídos
  • Informações adicionais

Neste guia, veja como usar o Mongoid para executar uma pesquisa de texto. Uma pesquisa de texto permite fazer query de forma eficiente em campos que tenham valores de string.

O MongoDB fornece índices de texto para dar suporte à pesquisa de queries em campos que têm valores de string ou valores que são arrays de elementos de string. Para saber mais sobre índices de texto, consulte Índices de texto em implementações autogerenciadas no manual do servidor.

Observação

Atlas Search

Este guia se concentra na pesquisa de texto. Se o seu banco de dados estiver hospedado no MongoDB Atlas, você poderá usar o recurso Atlas Search para realizar pesquisas de texto mais avançadas e flexíveis. Para saber mais sobre o Atlas Search, consulte a Visão geral do Atlas Search na documentação do Atlas .

Você pode executar uma pesquisa de texto executando as seguintes etapas:

  1. Defina um índice de texto em um modelo.

  2. Crie o índice de texto na coleção de destino.

  3. Execute uma query de pesquisa de texto .

As seções a seguir descrevem como executar cada uma dessas ações.

Use a macro index para especificar o índice de texto na definição do modelo. O seguinte código cria uma classe de modelo Dish que inclui um índice de texto no campo description :

class Dish
include Mongoid::Document
field :name, type: String
field :description, type: String
index description: 'text'
end

Observação

Você deve especificar o tipo de índice como uma string, conforme mostrado por 'text' no código anterior.

Em seguida, você deve criar o índice de texto em sua coleção. Você pode criar o índice usando uma interface como a UI do Atlas ou a Compass. Se você estiver usando a estrutura Rails para desenvolver seu aplicação, poderá executar a seguinte tarefa Rake para criar o índice com base na especificação do modelo:

bundle exec rake db:mongoid:create_indexes

Para saber mais sobre como usar índices com o Mongoid, consulte o guia Otimizar Queries com Índices .

Para executar uma pesquisa de texto, use o $text operador de query de avaliação do , seguido pelo $search campo em seu filtro de query. O $text operador executa uma pesquisa de texto nos campos indexados de texto. O $search campo especifica o texto para pesquisar nos campos indexados de texto. Para saber mais sobre esse operador, consulte a referência $text no manual do servidor.

Para pesquisar um termo, especifique o termo como uma string em seu filtro de query. Para pesquisar vários termos, separe cada termo com espaços na string.

Observação

Pesquisando vários termos

Ao pesquisar vários termos, o Mongoid retorna documentos com pelo menos um dos termos em campos indexados por texto.

Suponha que você pesquise usando a string 'cake coffee cream'. A seguinte lista descreve valores que correspondem a esta query de texto:

  • 'Has strong coffee notes.'

  • 'Good for creamy coffee fans.'

  • 'A rich but light cake.'

  • 'A creamy coffee cake with cranberries.'

O exemplo seguinte executa uma pesquisa de texto para valores description que contêm o termo 'herb':

Dish.where('$text' => {'$search' => 'herb'})
# Sample output
{"_id":"...","description":"A bright, herb-based salad. A perfect starter for vegetarians and vegans.","name":"Kale Tabbouleh"}
{"_id":"...","description":"Grilled whole fish stuffed with herbs and pomegranate seeds. Serves 3-4.","name":"Herbed Whole Branzino"}

Dica

Embora o termo de 'herb' pesquisa fosse, o método também corresponde a descrições contendo 'herbs' porque um índice de texto do MongoDB usa sufixo derivada para corresponder a palavras semelhantes. Para saber mais sobre como o MongoDB corresponde aos termos, consulte Propriedades do índice de texto no {+server-manual}.

Para pesquisar uma frase, especifique a frase com aspas escapadas como uma string em seu filtro de query. Se você não adicionar aspas escapadas ao redor da frase, o Mongoid executará uma pesquisa de termo .

Dica

As aspas escapadas são um caractere de barra invertida (\) seguido por um caractere de aspas duplas (").

O exemplo seguinte executa uma pesquisa de texto para valores description que contêm a frase "serves 2":

Dish.where('$text' => {'$search' => "\"serves 2\""})
# Sample output
{"_id":"...","description":"A vegetarian take on the classic dish that uses lentils as a base. Serves 2.","name":"Shepherd’s Pie"}
{"_id":"...","description":"Baked trout seasoned with garlic, lemon, dill, and, of course, butter. Serves 2.","name":"Garlic Butter Trout"}

Para cada termo ou frase a ser excluída da pesquisa de texto, especifique o termo ou frase prefixada com um sinal de subtração (-) como uma string no filtro de query.

Importante

Você deve pesquisar pelo menos um termo para excluí-los da sua pesquisa. Se você não pesquisar nenhum termo, o Mongoid não retornará nenhum documento.

O exemplo seguinte executa uma pesquisa de texto para valores description que contêm o termo 'vegan', mas não contêm o termo 'tofu':

Dish.where('$text' => {'$search' => 'vegan -tofu'})
# Sample output
{"_id":"...","description":"A bright, herb-based salad. A perfect starter for vegetarians and vegans.","name":"Kale Tabbouleh"}

Para saber mais sobre a construção de filtros de query, consulte Especificar uma query.

Para saber mais sobre como executar operações CRUD, consulte o guia Executar operações de dados.

Voltar

Agregação