sql >> Databasteknik >  >> NoSQL >> MongoDB

mongodb textsökning med flera språk

Länkarna är döda från både frågan och det ursprungliga svaret, men det finns ett sätt att definiera schemat för detta som stöds i moderna versioner.

Det rekommenderade sättet skulle vara att inkludera ett "language" egenskap i dokumentet eller inbäddade dokument bredvid egenskapen som används för textindex. Termen "bredvid" betyder på "samma nivå" och inte specifikt intill fastigheten i indexet.

Något vanligt skulle se ut så här:

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

Och sedan förutsatt att vi använder "standard" textindexspråk för "engelska" kan vi helt enkelt indexera med:

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

MongoDB kommer då att använda "language" egenskap som antingen visas i dokumentets "root" eller från "inbäddade dokument" i arrayen, och där den utelämnas kommer den helt enkelt att använda standarden definierad för indexet. Till exempel har det andra dokumentet här ingen språkegenskap på "roten" så "english" antas eftersom det är standard i indexet.

Objekten som indexeras behöver inte vara i någon ordning, vilket också visas genom att ha "english" posten i "translations" array med inbäddade dokument av det första exempeldokumentet. Reglerna för inbäddade objekt skiljer sig något åt ​​genom att vi måste inkludera "language" egenskaper på de inbäddade dokumenten eller det faktiska språket som används med är det från dokumentets "root". I det här exemplet alla inbäddade dokument i arrayen utan "language" egenskapen skulle anses använda "spanish" eftersom det är vad som definieras i "roten".

Alla sökningar görs naturligtvis med hänsyn till alla sökvägar som finns i indexet, så på både "description" och den inbäddade "translation.description" egenskaper enligt definitionen här. Lämpligt "sökspråk" används fortfarande alltid som specificerat med $language alternativet till $text operatorn, eftersom "stoppord" och "stämning" fortfarande betraktas i relation till detta och standardindexspråket som ställts in när indexet skapades.

Det inbäddade formatet ger dig också en enkel punkt från vilken du kan hämta språkinformationen för "översättning" mellan två språk där du har definierat innehållet för båda språken i fråga, så det är praktiskt "dubbelt" i det här fallet.

Den specifika dokumentationen finns nu på Skapa ett textindex för en samling på flera språk som ett avsnitt inom det bredare ämnet Specificera ett språk för textindex som innehåller länkar till alla andra detaljer, inklusive att ange ett annat standardspråk på indexet.



  1. Networkx slutar aldrig beräkna Betweenness centrality för 2 mil noder

  2. Hur får man ReferenceField-data i mongoengine?

  3. Automatisera databashälsokontroll

  4. Är redis en hållbar databutik?