Udostępnij przez


Indeksowanie pełnotekstowe i wyszukiwanie w usłudze Cosmos DB w sieci szkieletowej

Usługa Cosmos DB w sieci szkieletowej oferuje zaawansowaną funkcję wyszukiwania pełnotekstowego jako ogólnie dostępną. Ta funkcja została zaprojektowana w celu ulepszenia natywnych funkcji wyszukiwania aplikacji bez konieczności zewnętrznej usługi wyszukiwania na potrzeby podstawowego wyszukiwania pełnotekstowego.

Usługa Cosmos DB w Fabric oferuje indeksowanie i wyszukiwanie pełnotekstowe, mające na celu ulepszenie obciążeń wyszukiwania i pobierania. Ta funkcja obejmuje zaawansowane techniki przetwarzania tekstu, takie jak stemming, zatrzymywanie usuwania wyrazów i tokenizacja, umożliwiając wydajne i skuteczne wyszukiwanie tekstu za pośrednictwem wyspecjalizowanego indeksu tekstowego. Wyszukiwanie pełnotekstowe obejmuje również ocenianie pełnotekstowe z funkcją, która ocenia istotność dokumentów dla danego zapytania wyszukiwania. BM25 lub Best Matching 25 uwzględnia czynniki takie jak częstotliwość terminów, odwrotna częstotliwość dokumentów i długość dokumentu w celu oceny i klasyfikacji dokumentów. Dzięki temu w górnej części wyników wyszukiwania są wyświetlane najbardziej odpowiednie dokumenty, co zwiększa dokładność i użyteczność wyszukiwań tekstowych.

Wyszukiwanie pełnotekstowe jest idealne w różnych scenariuszach, w tym:

  • Handel elektroniczny: szybkie znajdowanie produktów na podstawie opisów, przeglądów i innych atrybutów tekstowych.

  • Zarządzanie zawartością: efektywne wyszukiwanie artykułów, blogów i dokumentów.

  • Obsługa klienta: Zyskiwać odpowiednie zgłoszenia wsparcia technicznego, często zadawane pytania oraz artykuły w bazie wiedzy.

  • Zawartość użytkownika: analizowanie i wyszukiwanie zawartości wygenerowanej przez użytkownika, takiej jak wpisy i komentarze.

  • RAG dla czatbotów: ulepsz odpowiedzi czatbota, pobierając odpowiednie informacje z dużego korpusu tekstu, poprawiając dokładność i znaczenie odpowiedzi.

  • Aplikacje sztucznej inteligencji dla wielu agentów: umożliwia wielu agentom sztucznej inteligencji wspólne wyszukiwanie i analizowanie ogromnych ilości danych tekstowych, zapewniając kompleksowe i zniuansowane szczegółowe informacje.

  1. Skonfiguruj kontener z polityką pełnego tekstu i indeksem pełnotekstowym.

  2. Wstaw dane z właściwościami tekstowymi.

  3. Uruchamianie zapytań względem danych przy użyciu funkcji systemu wyszukiwania pełnotekstowego.

Aby użyć funkcji wyszukiwania pełnotekstowego, należy najpierw zdefiniować dwie zasady:

  • Zasady pełnotekstowe na poziomie kontenera definiujące, które ścieżki zawierają tekst dla nowych funkcji systemu zapytań pełnotekstowych.

  • Indeks pełnotekstowy dodany do zasad indeksowania, który umożliwia wydajne wyszukiwanie.

Zapytania wyszukiwania pełnotekstowego można uruchamiać bez tych zasad, ale nie używają indeksu pełnotekstowego i mogą zużywać więcej jednostek żądań (RU). Bez tych zasad wyszukiwanie pełnotekstowe może również trwać dłużej. Zalecane jest zdefiniowanie zasad pełnego kontenera tekstu i indeksu.

Polityka pełnego tekstu

Dla każdej właściwości tekstowej, którą chcesz skonfigurować do wyszukiwania pełnotekstowego, należy zadeklarować zarówno path właściwość z tekstem, jak i language tekst. Proste zasady pełnotekstowe mogą być następujące:

{
  "defaultLanguage": "en-US",
  "fullTextPaths": [
    {
      "path": "/text",
      "language": "en-US"
    }
  ]
}

Definiowanie wielu ścieżek tekstowych jest łatwe przez dodanie innego elementu do tablicy fullTextPolicy :

{
  "defaultLanguage": "en-US",
  "fullTextPaths": [
    {
      "path": "/text1",
      "language": "en-US"
    },
    {
      "path": "/text2",
      "language": "en-US"
    }
  ]
}

Ważne

Symbole wieloznaczne (*, []) nie są obecnie obsługiwane w polityce pełnotekstowej ani w indeksie pełnotekstowym.

Aby uzyskać więcej informacji i przykłady ustawień zasad pełnotekstowych, zobacz przykłady zasad indeksowania pełnotekstowego.

Obsługa wielu języków

Obsługa wielu języków umożliwia indeksowanie i wyszukiwanie tekstu w językach poza językiem angielskim. Stosuje tokenizację specyficzną dla języka, stemming i usuwanie stopwordów, aby uzyskać dokładniejsze wyniki wyszukiwania.

Uwaga / Notatka

Obsługa wielu języków jest dostępna we wczesnej wersji zapoznawczej. Wydajność i jakość wyszukiwania mogą być inne niż wyszukiwanie pełnotekstowe w języku angielskim. Na przykład usuwanie stopwordu jest obecnie dostępne tylko dla języka angielskiego (en-us). Funkcje mogą ulec zmianie dzięki ewolucji wersji zapoznawczej.

Aby uzyskać więcej informacji na temat ograniczeń związanych z obsługą wielu języków, zobacz Ograniczenia pełnotekstowe usługi Cosmos DB.

Indeks pełnotekstowy

Wszystkie operacje wyszukiwania pełnotekstowego powinny korzystać z indeksu pełnotekstowego. Indeks pełnotekstowy można łatwo zdefiniować w dowolnej bazie danych Cosmos DB w polityce indeksu Fabric, zgodnie z przykładem tutaj:

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/\"_etag\"/?"
    },
  ],
  "fullTextIndexes": [
    {
      "path": "/text"
    }
  ]
}

Podobnie jak w przypadku zasad pełnotekstowych indeksy pełnotekstowe można definiować na wielu ścieżkach:

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/\"_etag\"/?"
    },
  ],
  "fullTextIndexes": [
    {
      "path": "/text"
    },
    {
      "path": "/text2"
    }
  ]
}

Zapytania wyszukiwania pełnotekstowego

Operacje wyszukiwania pełnotekstowego i oceniania są wykonywane przy użyciu następujących funkcji systemowych w usłudze Cosmos DB w języku zapytań Fabric.

  • FULLTEXTCONTAINS: zwraca wartość true, jeśli dany ciąg jest zawarty w określonej właściwości dokumentu. Ta funkcja jest przydatna w klauzuli WHERE , gdy chcesz upewnić się, że określone słowa kluczowe są zawarte w dokumentach zwracanych przez zapytanie.

  • FULLTEXTCONTAINSALL: zwraca wartość true , jeśli wszystkie podane ciągi znajdują się we określonej właściwości dokumentu. Ta funkcja jest przydatna w klauzuli WHERE , gdy chcesz upewnić się, że wiele słów kluczowych jest uwzględnionych w dokumentach zwracanych przez zapytanie.

  • FULLTEXTCONTAINSANY: zwraca true , jeśli którykolwiek z podanych ciągów znajduje się we określonej właściwości dokumentu. Ta funkcja jest przydatna w klauzuli WHERE , gdy chcesz upewnić się, że co najmniej jeden z słów kluczowych jest uwzględniony w dokumentach zwracanych przez zapytanie.

  • FULLTEXTSCORE: Użyj tej funkcji w klauzuli , ORDER BY RANK aby zwrócić dokumenty uporządkowane według ich pełnego wyniku tekstowego, umieszczając najbardziej istotne (najwyższe wyniki) dokumenty u góry i najmniej istotne (najniższe wyniki) u dołu.

Oto kilka przykładów każdej używanej funkcji.

FULLTEXTCONTAINS

W tym przykładzie chcemy uzyskać pierwsze 10 wyników, w których fraza "czerwony rower" znajduje się we właściwości c.text.

SELECT TOP 10
  *
FROM
  container c
WHERE
  FULLTEXTCONTAINS(c.text, "red bicycle")

FULLTEXTCONTAINSALL

W tym przykładzie chcemy uzyskać pierwsze 10 wyników, w których słowa kluczowe "czerwony" i "rower" znajdują się we właściwości c.text, ale niekoniecznie razem.

SELECT TOP 10 *
FROM c
WHERE FULLTEXTCONTAINSALL(c.text, "red", "bicycle")

FULLTEXTCONTAINSANY

W tym przykładzie chcemy uzyskać pierwsze 10 wyników, w których słowa kluczowe "czerwony" i "rower" lub "deskorolka" znajdują się we właściwości c.text.

SELECT TOP 10
  *
FROM
  container c
WHERE
  FULLTEXTCONTAINS(c.text, "red") AND 
  FULLTEXTCONTAINSANY(c.text, "bicycle", "skateboard")

FULLTEXTSCORE

W tym przykładzie chcemy uzyskać pierwsze 10 wyników, w których uwzględniono "góry" i "rower" oraz posortowane według kolejności istotności. Oznacza to, że dokumenty, które mają te terminy częściej, powinny pojawiać się wyżej na liście.

SELECT TOP 10
  *
FROM
  container c
ORDER BY RANK
  FULLTEXTSCORE(c.text, "bicycle", "mountain")

Ważne

FULLTEXTSCORE można używać tylko w klauzuli ORDER BY RANK , a nie w instrukcji SELECT lub klauzuli WHERE .

Wyszukiwanie rozmyte może zwiększyć odporność na literówki i odmiany tekstu. Można określić dozwoloną "odległość" (liczbę edycji) między terminem wyszukiwania a tekstem dokumentu, co pozwala na uznanie bliskich dopasowań za trafienia. Maksymalna odległość, którą można określić, wynosi 2 (dwie edycje).

Uwaga / Notatka

Wyszukiwanie rozmyte jest w wczesnej wersji zapoznawczej. Wydajność, jakość i funkcjonalność mogą ulec zmianie dzięki ewolucji wersji zapoznawczej.

SELECT TOP 10
  *
FROM
  container c
WHERE
  FULLTEXTCONTAINS(c.text, {"term": "red", "distance":1}, {"term": "bicycle", "distance":2})