Realizando pesquisa de texto com o Amazon DocumentDB - Amazon DocumentDB

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Realizando pesquisa de texto com o Amazon DocumentDB

O recurso nativo de pesquisa de texto completo do Amazon DocumentDB permite que você realize pesquisas de texto em grandes conjuntos de dados textuais usando índices de texto para fins especiais. Esta seção descreve as funcionalidades do recurso de índice de texto e fornece etapas sobre como criar e usar índices de texto no Amazon DocumentDB. As limitações da pesquisa de texto também estão listadas.

Funcionalidades suportadas

A pesquisa de texto do Amazon DocumentDB oferece suporte às seguintes funcionalidades compatíveis com o MongoDB: API

  • Crie índices de texto em um único campo.

  • Crie índices de texto composto que incluam mais de um campo de texto.

  • Faça pesquisas com uma ou várias palavras.

  • Controle os resultados da pesquisa usando pesos.

  • Classifique os resultados da pesquisa por pontuação.

  • Use o índice de texto no pipeline de agregação.

  • Pesquise a frase exata.

Para criar um índice de texto em um campo contendo dados de string, especifique a string “text” conforme mostrado abaixo:

Índice de campo único:

db.test.createIndex({"comments": "text"})

Esse índice suporta consultas de pesquisa de texto no campo de sequência de caracteres “comentários” na coleção especificada.

Crie um índice de texto composto em mais de um campo de string:

db.test.createIndex({"comments": "text", "title":"text"})

Esse índice suporta consultas de pesquisa de texto nos campos de string “comentários” e “título” na coleção especificada. Você pode especificar até 30 campos ao criar um índice de texto composto. Depois de criadas, suas consultas de pesquisa de texto consultarão todos os campos indexados.

nota

Somente um índice de texto é permitido em cada coleção.

Listar um índice de texto em uma coleção do Amazon DocumentDB

Você pode usar getIndexes() em sua coleção para identificar e descrever índices, incluindo índices de texto, conforme mostrado no exemplo abaixo:

rs0:PRIMARY> db.test.getIndexes() [ { "v" : 4, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.test" }, { "v" : 1, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "contents_text", "ns" : "test.test", "default_language" : "english", "weights" : { "comments" : 1 }, "textIndexVersion" : 1 } ]

Depois de criar um índice, comece a inserir dados em sua coleção do Amazon DocumentDB.

db.test.insertMany([{"_id": 1, "star_rating": 4, "comments": "apple is red"}, {"_id": 2, "star_rating": 5, "comments": "pie is delicious"}, {"_id": 3, "star_rating": 3, "comments": "apples, oranges - healthy fruit"}, {"_id": 4, "star_rating": 2, "comments": "bake the apple pie in the oven"}, {"_id": 5, "star_rating": 5, "comments": "interesting couch"}, {"_id": 6, "star_rating": 5, "comments": "interested in couch for sale, year 2022"}])

Executando consultas de pesquisa de texto

Execute uma consulta de pesquisa de texto com uma única palavra

Você precisará usar $search operadores $text e para realizar pesquisas de texto. O exemplo a seguir retorna todos os documentos em que seu campo indexado de texto contém a string “apple” ou “apple” em outros formatos, como “apples”:

db.test.find({$text: {$search: "apple"}})

Saída:

A saída desse comando é mais ou menos assim:

{ "_id" : 1, "star_rating" : 4, "comments" : "apple is red" } { "_id" : 3, "star_rating" : 3, "comments" : "apples, oranges - healthy fruit" } { "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven" }

Execute uma pesquisa de texto com várias palavras

Você também pode realizar pesquisas de texto com várias palavras nos seus dados do Amazon DocumentDB. O comando abaixo retorna documentos com um campo indexado de texto contendo “maçã” ou “torta”:

db.test.find({$text: {$search: "apple pie"}})

Saída:

A saída desse comando é mais ou menos assim:

{ "_id" : 1, "star_rating" : 4, "comments" : "apple is red" } { "_id" : 2, "star_rating" : 5, "comments" : "pie is delicious" } { "_id" : 3, "star_rating" : 3, "comments" : "apples, oranges - healthy fruit" } { "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven" }

Execute uma pesquisa de texto com várias palavras

Para uma pesquisa com várias palavras, use este exemplo:

db.test.find({$text: {$search: "\"apple pie\""}})

Saída:

O comando acima retorna documentos com campo indexado de texto contendo a frase exata “torta de maçã”. A saída desse comando é mais ou menos assim:

{ "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven" }

Execute uma pesquisa de texto com filtros

Você também pode combinar a pesquisa de texto com outros operadores de consulta para filtrar os resultados com base em critérios adicionais:

db.test.find({$and: [{star_rating: 5}, {$text: {$search: "interest"}}]})

Saída:

O comando acima retorna documentos com um campo indexado de texto contendo qualquer forma de “interesse” e uma “avaliação_estrela” igual a 5. A saída desse comando é mais ou menos assim:

{ "_id" : 5, "star_rating" : 5, "comments" : "interesting couch" } { "_id" : 6, "star_rating" : 5, "comments" : "interested in couch for sale, year 2022" }

Limitar o número de documentos retornados em uma pesquisa de texto

Você pode optar por restringir o número de documentos devolvidos usandolimit:

db.test.find({$and: [{star_rating: 5}, {$text: {$search: "couch"}}]}).limit(1)

Saída:

O comando acima retorna um resultado que satisfaz o filtro:

{ "_id" : 5, "star_rating" : 5, "comments" : "interesting couch" }

Classificar resultados por pontuação de texto

O exemplo a seguir classifica os resultados da pesquisa de texto por pontuação de texto:

db.test.find({$text: {$search: "apple"}}, {score: {$meta: "textScore"}}).sort({score: {$meta: "textScore"}})

Saída:

O comando acima retorna documentos com um campo indexado de texto contendo “maçã” ou “maçã” em outros formatos, como “maçãs”, e classifica o resultado com base na relevância do documento em relação ao termo de pesquisa. A saída desse comando é mais ou menos assim:

{ "_id" : 1, "star_rating" : 4, "comments" : "apple is red", "score" : 0.6079270860936958 } { "_id" : 3, "star_rating" : 3, "comments" : "apples, oranges - healthy fruit", "score" : 0.6079270860936958 } { "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven", "score" : 0.6079270860936958 }

$texte também $search são compatíveis com delete comandos aggregate count findAndModifyupdate,,, e.

Operadores de agregação

Pipeline de agregação usando $match

db.test.aggregate( [{ $match: { $text: { $search: "apple pie" } } }] )

Saída:

O comando acima retorna os seguintes resultados:

{ "_id" : 1, "star_rating" : 4, "comments" : "apple is red" } { "_id" : 3, "star_rating" : 3, "comments" : "apple - a healthy fruit" } { "_id" : 4, "star_rating" : 2, "comments" : "bake the apple pie in the oven" } { "_id" : 2, "star_rating" : 5, "comments" : "pie is delicious" }

Uma combinação de outros operadores de agregação

db.test.aggregate( [ { $match: { $text: { $search: "apple pie" } } }, { $sort: { score: { $meta: "textScore" } } }, { $project: { score: { $meta: "textScore" } } } ] )

Saída:

O comando acima retorna os seguintes resultados:

{ "_id" : 4, "score" : 0.6079270860936958 } { "_id" : 1, "score" : 0.3039635430468479 } { "_id" : 2, "score" : 0.3039635430468479 } { "_id" : 3, "score" : 0.3039635430468479 }

Especifique vários campos ao criar um índice de texto

Você pode atribuir pesos a até três campos em seu índice de texto composto. O peso padrão atribuído a um campo em um índice de texto é um (1). O peso é um parâmetro opcional e deve estar na faixa de 1 a 100000.

db.test.createIndex( { "firstname": "text", "lastname": "text", ... }, { weights: { "firstname": 5, "lastname":10, ... }, name: "name_text_index" } )

Diferenças com o MongoDB

O recurso de índice de texto do Amazon DocumentDB usa índice invertido com um algoritmo de frequência de termos. Os índices de texto são esparsos por padrão. Devido às diferenças na lógica de análise, delimitadores de tokenização e outros, o mesmo conjunto de resultados do MongoDB pode não ser retornado para o mesmo conjunto de dados ou formato de consulta.

Existem as seguintes diferenças adicionais entre o índice de texto do Amazon DocumentDB e o MongoDB:

  • Não há suporte para índices compostos usando índices que não sejam de texto.

  • Os índices de texto do Amazon DocumentDB não diferenciam maiúsculas de minúsculas e sinais diacríticos.

  • Somente o idioma inglês é compatível com o índice de texto.

  • A indexação de texto de campos de matriz (ou de várias chaves) não é suportada. Por exemplo, a criação de um índice de texto em “a “com o documento {“a”: [“apple”, “pie”]} falhará.

  • A indexação de texto curinga não é suportada.

  • Índices de texto exclusivos não são suportados.

  • A exclusão de um termo não é suportada.

Melhores práticas e diretrizes

  • Para um desempenho ideal em consultas de pesquisa de texto que envolvam classificação por pontuações de texto, recomendamos que você crie o índice de texto antes de carregar os dados.

  • Os índices de texto exigem armazenamento adicional para uma cópia interna otimizada dos dados indexados. Isso tem implicações adicionais de custo.

Limitações

A pesquisa de texto tem as seguintes limitações no Amazon DocumentDB:

  • A pesquisa de texto é compatível somente com clusters baseados em instâncias do Amazon DocumentDB 5.0.