sql >> Database >  >> NoSQL >> MongoDB

mongodb tekst zoeken met meerdere talen

De links zijn dood van zowel de vraag als het oorspronkelijke antwoord, maar er is een manier om het schema hiervoor te definiëren dat wordt ondersteund in moderne versies.

De aanbevolen manier is om een ​​"language" . op te nemen eigenschap in het document of ingesloten documenten naast de eigenschap die wordt gebruikt voor de tekstindex. De term 'naast' betekent op 'hetzelfde niveau' en niet specifiek naast de eigenschap in de index.

Iets algemeens zou er als volgt uitzien:

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

En als we aannemen dat we de "standaard" tekstindextaal "engels" gebruiken, kunnen we eenvoudig indexeren met:

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

MongoDB gebruikt dan de "language" eigenschap zoals getoond in het document "root" of van "embedded documenten" in de array, en waar weggelaten zal het gewoon de standaard gebruiken die voor de index is gedefinieerd. Het tweede document hier heeft bijvoorbeeld geen taaleigenschap op de "root" dus "english" wordt verondersteld omdat het de standaard is in de index.

De geïndexeerde items hoeven niet in een willekeurige volgorde te staan, zoals ook blijkt uit het hebben van de "english" invoer in de "translations" array met ingesloten documenten door het eerste voorbeelddocument. De regels voor ingesloten items verschillen enigszins in die zin dat we moeten voeg de "language" toe eigenschappen op de ingesloten documenten of de daadwerkelijke taal die wordt gebruikt met die van het document "root". In dit voorbeeld elk ingesloten document in de array zonder de "language" eigendom zou worden beschouwd als het gebruik van "spanish" aangezien dat is wat is gedefinieerd in de "root".

Zoekopdrachten worden natuurlijk allemaal gedaan met inachtneming van alle paden die aanwezig zijn in de index, dus op zowel de "description" en de ingesloten "translation.description" eigenschappen zoals hier gedefinieerd. De juiste "zoektaal" wordt nog steeds altijd gebruikt zoals gespecificeerd met de $language optie naar de $text operator, aangezien "stopwoorden" en "stemming" nog steeds worden beschouwd in verband hiermee en de standaardindextaal die is ingesteld bij het maken van de index.

Het ingebedde formaat geeft je ook een gemakkelijk punt om de taalinformatie op te halen voor het "vertalen" tussen twee talen waarbij je de inhoud hebt gedefinieerd voor beide talen in kwestie, dus de praktische bruikbaarheid is in dit geval "tweevoudig".

De specifieke documentatie is nu te vinden op Maak een tekstindex voor een verzameling in meerdere talen als een sectie binnen het bredere onderwerp van Specificeer een taal voor tekstindex die links bevat naar alle andere details, inclusief het specificeren van een andere standaardtaal in de index.



  1. Is master altijd de instantie opnieuw met de kleinste prioriteit?

  2. Zelf-gehoste MongoDB

  3. Mongo:tel het aantal woorden dat voorkomt in een set documenten

  4. Hoe kan ik alle sets in redis krijgen?