Sdílet prostřednictvím


Vyhledávání a dotazování pomocí textových indexů ve službě Azure Cosmos DB pro virtuální jádra MongoDB

PLATÍ PRO: Virtuální jádro MongoDB

Jednou z klíčových funkcí, které poskytuje virtuální jádro Azure Cosmos DB pro MongoDB, je indexování textu, které umožňuje efektivní vyhledávání a dotazování textových dat. Služba implementuje textové indexy verze 2 . Verze 2 podporuje citlivost malých a malých písmen, ale ne diakritickou citlivost.

Textové indexy ve službě Azure Cosmos DB pro MongoDB jsou speciální datové struktury, které optimalizují dotazy založené na textu, což je rychlejší a efektivnější. Jsou navržené tak, aby zpracovávaly textový obsah, jako jsou dokumenty, články, komentáře nebo jiná textová data. Textové indexy používají k vytvoření indexu techniky, jako je tokenizace, vytváření a zastavování slov, které vylepšují výkon textových hledání.

Požadavky

  • Existující cluster azure Cosmos DB pro virtuální jádra MongoDB

Definování textového indexu

Pro zjednodušení se podívejme na příklad aplikace blogu s následujícím nastavením:

  • Název databáze: cosmicworks
  • Název kolekce: products

Tato ukázková aplikace ukládá články jako dokumenty s následující strukturou:

{
  "_id": ObjectId("617a34e7a867530bff1b2346"),
  "title": "Azure Cosmos DB - A Game Changer",
  "content": "Azure Cosmos DB is a globally distributed, multi-model database service.",
  "author": "John Doe",
  "category": "Technology",
  "published": true
}
  1. Použijte metodu createIndextext s možností k vytvoření textového indexu v title poli.

    use cosmicworks;
    
    db.products.createIndex({ title: "text" })
    

    Poznámka:

    I když můžete definovat pouze jeden textový index na kolekci, virtuální jádro služby Azure Cosmos DB pro MongoDB umožňuje vytvářet textové indexy na více polích, abyste mohli provádět vyhledávání textu napříč různými poli v dokumentech.

  2. Volitelně můžete vytvořit index, který podporuje vyhledávání v polích title i content v polích.

    db.products.createIndex({ title: "text", content: "text" })
    

Konfigurace možností indexu textu

Textové indexy ve službě Azure Cosmos DB pro MongoDB mají několik možností přizpůsobení jejich chování. Můžete například zadat jazyk pro analýzu textu, nastavit váhy pro stanovení priority určitých polí a nakonfigurovat vyhledávání bez rozlišování velkých a malých písmen. Tady je příklad vytvoření textového indexu s možnostmi:

  1. Vytvořte index, který podporuje vyhledávání v titlecontent obou polích s podporou anglického jazyka. Také přiřaďte poli vyšší váhy title , aby bylo možné určit prioritu ve výsledcích hledání.

    db.products.createIndex(
        { title: "text", content: "text" },
        { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false }
    )
    

Váhy v indexech textu

Při vytváření textového indexu můžete jednotlivým polím v indexu přiřadit různé váhy. Tyto váhy představují důležitost nebo relevanci každého pole ve vyhledávání. Azure Cosmos DB pro virtuální jádro MongoDB vypočítá skóre a přiřazené váhy pro každý dokument na základě hledaných termínů při provádění vyhledávacího dotazu textu. Skóre představuje relevanci dokumentu s vyhledávacím dotazem.

  1. Vytvořte index, který podporuje vyhledávání v polích i content v title polích. Přiřaďte váhu 2 k poli "title" a váhu 1 k poli "obsah".

    db.products.createIndex(
    { title: "text", content: "text" },
    { weights: { title: 2, content: 1 } }
    )
    

    Poznámka:

    Když klient provede textový vyhledávací dotaz s termínem "Cosmos DB", skóre každého dokumentu v kolekci se vypočítá na základě přítomnosti a frekvence termínu v polích "title" i "content" s vyšší důležitostí vzhledem k jeho vyšší hmotnosti.

Hledání textu pomocí textového indexu

Po vytvoření textového indexu můžete v dotazech provádět vyhledávání textu pomocí operátoru "text". Textový operátor vezme hledaný řetězec a porovná ho s textovým indexem k vyhledání relevantních dokumentů.

  1. Proveďte textové hledání fráze Cosmos DB.

    db.products.find(
        { $text: { $search: "Cosmos DB" } }
    )
    
  2. Volitelně můžete pomocí operátoru $meta projekce spolu s textScore polem v dotazu zobrazit váhu.

    db.products.find(
        { $text: { $search: "Cosmos DB" } },
        { score: { $meta: "textScore" } }
    )
    

Vyřazení textového indexu

Pokud chcete odstranit textový index v MongoDB, můžete použít dropIndex() metodu v kolekci a zadat klíč indexu nebo název textového indexu, který chcete odebrat.

  1. Přetáhněte textový index explicitním zadáním klíče.

    db.products.dropIndex({ title: "text" })
    
  2. Volitelně můžete textový index vyřadit zadáním automaticky vygenerovaného jedinečného názvu.

    db.products.dropIndex("title_text")
    

Omezení indexu textu

  • V kolekci lze definovat pouze jeden textový index.
  • Textové indexy podporují jednoduchá vyhledávání textu a neposkytují rozšířené možnosti vyhledávání, jako je hledání regulárních výrazů.
  • Hint() není podporován v kombinaci s dotazem pomocí výrazu $text.
  • Operace řazení nemůžou používat řazení textového indexu v MongoDB.
  • Textové indexy můžou být relativně velké a ve srovnání s jinými typy indexů spotřebovávají významný prostor úložiště.

Další krok