Wyszukiwanie i wykonywanie zapytań za pomocą indeksów tekstowych w usłudze Azure Cosmos DB dla rdzeni wirtualnych bazy danych MongoDB
DOTYCZY: Rdzenie wirtualne bazy danych MongoDB
Jedną z kluczowych funkcji oferowanych przez rdzeń wirtualny usługi Azure Cosmos DB dla bazy danych MongoDB jest indeksowanie tekstu, co umożliwia wydajne wyszukiwanie i wykonywanie zapytań dotyczących danych tekstowych. Usługa implementuje indeksy tekstowe w wersji 2 . Wersja 2 obsługuje czułość wielkości liter, ale nie ważność diakrytyczną.
Indeksy tekstowe w usłudze Azure Cosmos DB dla bazy danych MongoDB to specjalne struktury danych, które optymalizują zapytania tekstowe, dzięki czemu są szybsze i bardziej wydajne. Są one przeznaczone do obsługi zawartości tekstowej, takiej jak dokumenty, artykuły, komentarze lub inne dane z dużą liczbą tekstu. Indeksy tekstowe używają technik, takich jak tokenizacja, tworzenie i zatrzymywanie wyrazów w celu utworzenia indeksu, który poprawia wydajność wyszukiwań opartych na tekście.
Wymagania wstępne
- Istniejący klaster usługi Azure Cosmos DB dla rdzeni wirtualnych bazy danych MongoDB.
- Jeśli nie masz subskrypcji platformy Azure, utwórz bezpłatne konto.
- Jeśli masz istniejącą subskrypcję platformy Azure, utwórz nowy klaster usługi Azure Cosmos DB dla rdzeni wirtualnych bazy danych MongoDB.
Definiowanie indeksu tekstowego
Dla uproszczenia rozważmy przykład aplikacji blogu z następującą konfiguracją:
- Nazwa bazy danych:
cosmicworks
- Nazwa kolekcji:
products
Ta przykładowa aplikacja przechowuje artykuły jako dokumenty o następującej strukturze:
{
"_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
}
createIndex
Użyj metody z opcjątext
, aby utworzyć indeks tekstowy wtitle
polu.use cosmicworks; db.products.createIndex({ title: "text" })
Uwaga
Chociaż można zdefiniować tylko jeden indeks tekstowy dla kolekcji, rdzeń wirtualny usługi Azure Cosmos DB dla bazy danych MongoDB umożliwia tworzenie indeksów tekstowych w wielu polach w celu umożliwienia wykonywania wyszukiwań tekstowych w różnych polach w dokumentach.
Opcjonalnie utwórz indeks do obsługi wyszukiwania w polach
title
icontent
.db.products.createIndex({ title: "text", content: "text" })
Konfigurowanie opcji indeksu tekstowego
Indeksy tekstowe w usłudze Azure Cosmos DB dla bazy danych MongoDB mają kilka opcji dostosowywania ich zachowania. Można na przykład określić język analizy tekstu, ustawić wagi, aby określić priorytety niektórych pól i skonfigurować wyszukiwania bez uwzględniania wielkości liter. Oto przykład tworzenia indeksu tekstowego z opcjami:
Utwórz indeks do obsługi wyszukiwania w polach
title
icontent
z obsługą języka angielskiego. Ponadto przypisz większe wagi dotitle
pola, aby określić priorytety w wynikach wyszukiwania.db.products.createIndex( { title: "text", content: "text" }, { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false } )
Wagi w indeksach tekstowych
Podczas tworzenia indeksu tekstowego można przypisać różne wagi do poszczególnych pól w indeksie. Wagi te reprezentują znaczenie lub istotność każdego pola w wyszukiwaniu. Rdzeń wirtualny usługi Azure Cosmos DB dla bazy danych MongoDB oblicza wynik i przypisane wagi dla każdego dokumentu na podstawie terminów wyszukiwania podczas wykonywania zapytania wyszukiwania tekstowego. Wynik reprezentuje istotność dokumentu w zapytaniu wyszukiwania.
Utwórz indeks do obsługi wyszukiwania w polach
title
icontent
. Przypisz wagę 2 do pola "title" i wagę 1 do pola "content".db.products.createIndex( { title: "text", content: "text" }, { weights: { title: 2, content: 1 } } )
Uwaga
Gdy klient wykonuje zapytanie wyszukiwania tekstowego z terminem "Cosmos DB", wynik dla każdego dokumentu w kolekcji zostanie obliczony na podstawie obecności i częstotliwości terminu zarówno w polach "title" i "content", o większym znaczeniu dla pola "title" ze względu na większą wagę.
Wyszukiwanie tekstu przy użyciu indeksu tekstowego
Po utworzeniu indeksu tekstu można wykonywać wyszukiwania tekstowe przy użyciu operatora "text" w zapytaniach. Operator tekstu przyjmuje ciąg wyszukiwania i dopasuje go do indeksu tekstu w celu znalezienia odpowiednich dokumentów.
Wykonaj wyszukiwanie tekstu dla frazy
Cosmos DB
.db.products.find( { $text: { $search: "Cosmos DB" } } )
Opcjonalnie użyj operatora projekcji
$meta
wraz ztextScore
polem w zapytaniu, aby zobaczyć wagędb.products.find( { $text: { $search: "Cosmos DB" } }, { score: { $meta: "textScore" } } )
Usuwanie indeksu tekstowego
Aby usunąć indeks tekstowy w bazie danych MongoDB, możesz użyć dropIndex()
metody w kolekcji i określić klucz indeksu lub nazwę indeksu tekstu, który chcesz usunąć.
Upuść indeks tekstowy, jawnie określając klucz.
db.products.dropIndex({ title: "text" })
Opcjonalnie upuść indeks tekstowy, określając automatycznie wygenerowaną unikatową nazwę.
db.products.dropIndex("title_text")
Ograniczenia indeksu tekstu
- W kolekcji można zdefiniować tylko jeden indeks tekstowy.
- Indeksy tekstowe obsługują proste wyszukiwania tekstu i nie zapewniają zaawansowanych funkcji wyszukiwania, takich jak wyszukiwanie wyrażeń regularnych.
- Wskazówka() nie jest obsługiwana w połączeniu z zapytaniem przy użyciu wyrażenia $text.
- Operacje sortowania nie mogą używać kolejności indeksu tekstowego w bazie danych MongoDB.
- Indeksy tekstowe mogą być stosunkowo duże, zużywając znaczną ilość miejsca do magazynowania w porównaniu z innymi typami indeksów.