sql >> Databáze >  >> NoSQL >> MongoDB

textové vyhledávání mongodb pomocí více jazyků

Odkazy jsou mrtvé jak z otázky, tak z původní odpovědi, ale existuje způsob, jak definovat schéma pro toto, které je podporováno v moderních verzích.

Doporučeným způsobem by bylo zahrnout "language" vlastnost v dokumentu nebo vložené dokumenty vedle vlastnosti používané pro textový index. Výraz „vedle“ znamená „na stejné úrovni“ a nesousedí konkrétně s vlastností v indexu.

Něco běžného by vypadalo takto:

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

A pak za předpokladu, že používáme „výchozí“ jazyk textového indexu „angličtinu“, můžeme jednoduše indexovat pomocí:

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

MongoDB pak použije "language" vlastnost, jak je zobrazena v „kořenovém adresáři“ dokumentu nebo z „vložených dokumentů“ v poli, a pokud je vynechána, jednoduše použije výchozí hodnotu definovanou pro index. Například druhý dokument zde nemá žádnou jazykovou vlastnost na "root", takže "english" předpokládá se, protože je výchozí v indexu.

Indexované položky nemusejí být v žádném pořadí, což dokazuje i "english" záznam uvnitř "translations" pole s vloženými dokumenty podle prvního ukázkového dokumentu. Pravidla pro vložené položky se mírně liší v tom, že musíme zahrnout "language" vlastnosti na vložených dokumentech nebo skutečný jazyk používaný v dokumentu "root". V tomto příkladu jakýkoli vložený dokument v poli bez "language" vlastnost by byla považována za používající "spanish" protože to je to, co je definováno v "rootu".

Všechna vyhledávání se samozřejmě provádějí s ohledem na všechny cesty přítomné v indexu, takže na obou "description" a vložený "translation.description" vlastnosti, jak jsou zde definovány. Příslušný "jazyk vyhledávání" se stále používá, jak je uvedeno v $language možnost $text operátora, protože "stop slova" a "vycházející ze stop" jsou stále považovány ve vztahu k tomuto a výchozímu jazyku indexu nastavenému při vytváření indexu.

Vložený formát vám také poskytuje snadný bod, ze kterého můžete načíst jazykové informace pro „překlad“ mezi dvěma jazyky, kde máte obsah definovaný pro oba příslušné jazyky, takže praktičnost je v tomto případě „dvojí“.

Konkrétní dokumentace je nyní umístěna na Vytvořit textový index pro kolekci ve více jazycích jako část v rámci širšího tématu Určení jazyka pro textový index, která obsahuje odkazy na všechny další podrobnosti, včetně určení jiného výchozího jazyka v indexu.



  1. Vysvětlení limitu velikosti dokumentu MongoDB BSON

  2. Uzel redis vydavatel spotřebovává příliš mnoho paměti

  3. Pravděpodobnost kolize ObjectId vs UUID ve velkém distribuovaném systému

  4. Agregace MongoDB:Počítání různých polí