MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

pesquisa de texto mongodb usando vários idiomas


Os links estão mortos tanto da pergunta quanto da resposta original, mas há uma maneira de definir o esquema para isso que é suportado em versões modernas.

A maneira recomendada seria incluir um "language" propriedade no documento ou documentos incorporados ao lado da propriedade que está sendo usada para o índice de texto. O termo "próximo a" significa no "mesmo nível" e não especificamente adjacente à propriedade no índice.

Algo comum seria:
{
  "description": "Texto largo en español",
  "language": "spanish",
  "translation": [
    {
      "description": "Large text in Spanish",
      "language": "english"
    },
    {
      "description": "Grand texte en espagnol",
      "language": "french"
    }
  ]
},
{
  "description": "The quick brown fox",
  "translation": [
    {
      "description": "Le renard brun rapide",
      "language": : "french"
    }
  ]
}

E, presumindo que usamos o idioma de índice de texto "padrão" de "inglês", podemos simplesmente indexar com:
db.collection.createIndex({ "description": "text", "translation.description": "text" })

O MongoDB então usará o "language" como mostrado no documento "raiz" ou de "documentos incorporados" na matriz e, onde omitido, ele simplesmente usará o padrão definido para o índice. Por exemplo, o segundo documento aqui não tem propriedade de idioma na "raiz", então "english" é presumido, pois é o padrão no índice.

Os itens indexados não precisam estar em nenhuma ordem, como também demonstrado por ter o "english" entrada dentro do "translations" array com documentos incorporados pelo primeiro documento de amostra. As regras para itens incorporados diferem ligeiramente, pois precisamos inclua o "language" propriedades nos documentos incorporados ou o idioma real usado seja o do documento "raiz". Neste exemplo, qualquer documento incorporado no array sem o "language" a propriedade seria considerada como usando "spanish" já que é isso que está definido na "raiz".

É claro que as pesquisas são todas feitas considerando todos os caminhos presentes no índice, portanto, tanto na "description" e o "translation.description" incorporado propriedades definidas aqui. O "idioma de pesquisa" apropriado ainda é sempre usado conforme especificado com o $language opção para o $text operador, pois "stop words" e "stemming" ainda são considerados em relação a isso e o idioma de índice padrão definido na criação do índice.

O formato incorporado também oferece um ponto fácil de recuperar as informações do idioma para "traduzir" entre dois idiomas onde você tem o conteúdo definido para ambos os idiomas em questão, portanto, a praticidade é "duas vezes" neste caso.

A documentação específica agora está localizada em Criar um índice de texto para uma coleção em vários idiomas como uma seção dentro do tópico mais amplo de Especificar um idioma para índice de texto que inclui links para todos os outros detalhes, incluindo a especificação de um idioma padrão diferente no índice.