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
- Pokud nemáte předplatné Azure, vytvořte si účet zdarma.
- Pokud máte existující předplatné Azure, vytvořte nový 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
}
Použijte metodu
createIndex
text
s možností k vytvoření textového indexu vtitle
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.
Volitelně můžete vytvořit index, který podporuje vyhledávání v polích
title
icontent
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:
Vytvořte index, který podporuje vyhledávání v
title
content
obou polích s podporou anglického jazyka. Také přiřaďte poli vyšší váhytitle
, 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.
Vytvořte index, který podporuje vyhledávání v polích i
content
vtitle
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ů.
Proveďte textové hledání fráze
Cosmos DB
.db.products.find( { $text: { $search: "Cosmos DB" } } )
Volitelně můžete pomocí operátoru
$meta
projekce spolu stextScore
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.
Přetáhněte textový index explicitním zadáním klíče.
db.products.dropIndex({ title: "text" })
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ě.