sql >> Database teknologi >  >> NoSQL >> MongoDB

mongodb tekstsøgning ved hjælp af flere sprog

Linkene er døde fra både spørgsmålet og det oprindelige svar, men der er en måde at definere skemaet for dette på, som understøttes i moderne versioner.

Den anbefalede måde ville være at inkludere en "sprog" egenskab i dokumentet eller indlejrede dokumenter ved siden af ​​den egenskab, der bruges til tekstindekset. Udtrykket "ved siden af" betyder på "samme niveau" og ikke specifikt støder op til ejendommen i indekset.

Noget almindeligt ville se sådan ud:

{
  "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"
    }
  ]
}

Og hvis vi så antager, at vi bruger "standard" tekstindekssproget "engelsk", kan vi simpelthen indeksere med:

db.collection.createIndex({ "description": "text", "translation.description": "text" })

MongoDB vil derefter bruge "sprog" egenskab som enten vist i dokumentets "rod" eller fra "indlejrede dokumenter" i arrayet, og hvor udeladt vil den blot bruge standarden defineret for indekset. For eksempel har det andet dokument her ingen sprogegenskab på "roden", så "engelsk" formodes, da det er standard på indekset.

De indekserede elementer behøver ikke at være i nogen som helst rækkefølge, som også demonstreret ved at have "engelsk" indtastning i "oversættelser" array med indlejrede dokumenter ved det første eksempeldokument. Reglerne for indlejrede elementer adskiller sig lidt ved, at vi skal inkludere "sprog" egenskaber på de indlejrede dokumenter eller det faktiske sprog, der bruges med, er det fra dokumentets "rod". I dette eksempel et hvilket som helst indlejret dokument i arrayet uden "sprog" ejendom ville blive anset for at bruge "spanish" da det er det, der er defineret i "roden".

Søgninger udføres naturligvis alle under hensyntagen til alle stierne i indekset, så på både "beskrivelse" og den indlejrede "translation.description" egenskaber som defineret her. Det passende "søgesprog" bruges stadig altid som angivet med $language mulighed for $tekst operatør, da "stopord" og "stamming" stadig betragtes i forhold til dette og standardindekssproget, der er indstillet ved oprettelse af indeks.

Det indlejrede format giver dig også et let punkt, hvorfra du kan hente sproginformationen til "oversættelse" mellem to sprog, hvor du har defineret indholdet for begge de pågældende sprog, så det praktiske er "to gange" i dette tilfælde.

Den specifikke dokumentation er nu placeret på Opret et tekstindeks for en samling på flere sprog som en sektion inden for det bredere emne af Angiv et sprog for tekstindeks, som indeholder links til alle de andre detaljer, inklusive angivelse af et andet standardsprog på indekset.



  1. Opret, læs, opdater, slet data ved at bruge Node.js - Mongoose

  2. Kan jeg bruge Tornado+ Selleri+ RabbitMQ + Redis?

  3. Hvad er forskellen mellem findAndModify og update i MongoDB?

  4. Fjernforbindelse til MongoDB http-grænseflade på EC2-server