Udostępnij za pośrednictwem


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.

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
}
  1. createIndex Użyj metody z opcją text , aby utworzyć indeks tekstowy w title 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.

  2. Opcjonalnie utwórz indeks do obsługi wyszukiwania w polach title i content .

    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:

  1. Utwórz indeks do obsługi wyszukiwania w polach title i content z obsługą języka angielskiego. Ponadto przypisz większe wagi do title 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.

  1. Utwórz indeks do obsługi wyszukiwania w polach title i content . 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.

  1. Wykonaj wyszukiwanie tekstu dla frazy Cosmos DB.

    db.products.find(
        { $text: { $search: "Cosmos DB" } }
    )
    
  2. Opcjonalnie użyj operatora projekcji $meta wraz z textScore 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ąć.

  1. Upuść indeks tekstowy, jawnie określając klucz.

    db.products.dropIndex({ title: "text" })
    
  2. 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.

Następny krok