Kolejki indeksowania Google Cloud Search

Pakiet SDK Connector i Google Cloud Search API umożliwiają tworzenie kolejek indeksowania w Cloud Search używanych do wykonywania tych zadań:

  • Utrzymuj stan poszczególnych dokumentów (stan, wartości skrótu itd.), który może służyć do synchronizacji indeksu z repozytorium.

  • Utwórz listę elementów do zindeksowania w takiej postaci, w jakiej zostały wykryte podczas przemierzania.

  • Nadaj priorytet elementom w kolejce na podstawie ich stanu.

  • Przechowywanie dodatkowych informacji o stanie, takich jak punkty kontrolne czy token zmiany, w celu zapewnienia wydajnej integracji.

Kolejka to etykieta przypisana do zindeksowanego elementu. Na przykład „default” (domyślna) dla kolejki domyślnej lub „B” w przypadku kolejki B.

Stan i priorytet

Priorytet dokumentu w kolejce zależy od jego kodu ItemStatus. Oto możliwe kody ItemStatus w kolejności według priorytetu (obsługiwane od pierwszego do ostatniego):

  • ERROR – podczas procesu indeksowania element napotkał błąd asynchroniczny i wymaga ponownego zindeksowania.

  • MODIFIED – element, który był wcześniej indeksowany, ale został zmodyfikowany w repozytorium od ostatniego indeksowania.

  • NEW_ITEM – element, który nie został zindeksowany.

  • ACCEPTED – dokument, który został wcześniej indeksowany i nie zmienił się w repozytorium od ostatniego indeksowania.

Gdy 2 elementy w kolejce mają ten sam stan, wyższy priorytet otrzymują te, które w kolejce utrzymywały się najdłużej.

Omówienie korzystania z kolejek indeksowania do indeksowania nowego lub zmienionego elementu

Rysunek 1 przedstawia kroki indeksowania nowego lub zmienionego elementu z wykorzystaniem kolejki indeksowania. Te kroki pokazują wywołania interfejsu API REST. Informacje o równoważnych wywołaniach pakietu SDK znajdziesz w sekcji Queue Operations (Connector SDK).

Omówienie indeksowania w Google Cloud Search
Rysunek 1. Czynności, które należy wykonać, aby dodać lub zaktualizować element
  1. Łącznik treści używa items.push do przekazywania elementów (metadanych i szyfrowania) do kolejki indeksowania w celu ustalenia stanu elementu (MODIFIED, NEW_ITEM, DELETED). W tym celu:

    • Podczas przekazywania oprogramowanie sprzęgające udostępnia wprost funkcję push type lub contentHash.
    • Jeśli oprogramowanie sprzęgające nie zawiera interfejsu type, Cloud Search automatycznie określa stan elementu na podstawie contentHash.
    • Jeśli produkt jest nieznany, jego stan jest ustawiany na NEW_ITEM.
    • Jeśli produkt istnieje, a wartości skrótu do niego pasują, zostanie zachowany stan ACCEPTED.
    • Jeśli produkt istnieje, a szyfry różnią się, stan zmienia się na MODIFIED.

    Więcej informacji o tym, jak określany jest stan elementu, znajdziesz w przykładowym kodzie dotyczącym przechodzenia po repozytoriach GitHub w samouczku wprowadzającym do Cloud Search.

    Zwykle przekazywanie jest powiązane z procesami przemierzania treści lub wykrywania zmian w oprogramowaniu sprzęgającym.

  2. Łącznik treści używa items.poll do sondowania kolejki w celu określenia elementów do zindeksowania. Cloud Search informuje oprogramowanie sprzęgające o tym, które elementy najbardziej wymagają indeksowania. Lista jest posortowana najpierw według kodu stanu, a następnie według czasu w kolejce.

  3. Oprogramowanie sprzęgające pobiera te elementy z repozytorium i tworzy żądania do interfejsu API indeksu.

  4. Oprogramowanie sprzęgające używa narzędzia items.index do indeksowania elementów. Element przechodzi w stan ACCEPTED dopiero po zakończeniu przetwarzania go przez Cloud Search.

Oprogramowanie sprzęgające może też usunąć element, jeśli nie istnieje już w repozytorium, lub przekazać element ponownie, jeśli nie został zmodyfikowany lub wystąpi błąd repozytorium źródłowego. Informacje o usuwaniu elementów znajdziesz w następnej sekcji.

Omówienie korzystania z kolejek indeksowania do usuwania elementu

Strategia pełnego przemierzania wykorzystuje 2 kolejki do indeksowania elementów i wykrywania usunięć. Rysunek 2 przedstawia kroki usuwania elementu z wykorzystaniem 2 kolejek indeksowania. W szczególności na ilustracji 2 pokazano drugi przechodzenie z wykorzystaniem strategii pełnego przemierzania. W tych krokach używane są wywołania interfejsu API REST. Odpowiedniki wywołań pakietu SDK znajdziesz w artykule Operacje kolejki (pakiet SDK oprogramowania sprzęgającego).

Omówienie indeksowania w Google Cloud Search
Rysunek 2. Usuwanie elementów
  1. Podczas początkowego przemierzania łącznik treści używa usługi items.push do przekazania elementów (metadanych i haszowania) do kolejki indeksowania („kolejki A”) jako NEW_ITEM, ponieważ nie istnieje w kolejce. Każdy element ma przypisaną etykietę „A” dla „kolejki A”. Treści są indeksowane w Cloud Search.

  2. Łącznik treści używa items.poll do sondowania kolejki A w celu określenia elementów do zindeksowania. Cloud Search informuje oprogramowanie sprzęgające o tym, które elementy najbardziej wymagają indeksowania. Lista jest posortowana najpierw według kodu stanu, a następnie według czasu w kolejce.

  3. Oprogramowanie sprzęgające pobiera te elementy z repozytorium i tworzy żądania do interfejsu API indeksu.

  4. Oprogramowanie sprzęgające używa narzędzia items.index do indeksowania elementów. Element przechodzi w stan ACCEPTED dopiero po zakończeniu przetwarzania go przez Cloud Search.

  5. Metoda deleteQueueItems jest wywoływana w kolejce B. Ale żadne elementy nie zostały przekazane do kolejki B, więc nie można nic usunąć.

  6. Podczas drugiego pełnego przemierzania łącznik treści używa usługi items.push do przekazania elementów (metadanych i haszowania) do kolejki B:

    • Podczas przekazywania oprogramowanie sprzęgające udostępnia wprost funkcję push type lub contentHash.
    • Jeśli oprogramowanie sprzęgające nie zawiera interfejsu type, Cloud Search automatycznie określa stan elementu na podstawie contentHash.
    • Jeśli element jest nieznany, jego stan jest ustawiany na NEW_ITEM, a etykieta kolejki zmienia się na „B”.
    • Jeśli element istnieje, a wartości skrótu są zgodne, stan zostanie zachowany jako ACCEPTED, a etykieta kolejki zmieni się na „B”.
    • Jeśli element istnieje, a szyfry różnią się, stan zmienia się na MODIFIED, a etykieta kolejki zmienia się na „B”.
  7. Łącznik treści używa items.poll do sondowania kolejki w celu określenia elementów do zindeksowania. Cloud Search informuje oprogramowanie sprzęgające o tym, które elementy najbardziej wymagają indeksowania. Lista jest posortowana najpierw według kodu stanu, a następnie według czasu w kolejce.

  8. Oprogramowanie sprzęgające pobiera te elementy z repozytorium i tworzy żądania do interfejsu API indeksu.

  9. Oprogramowanie sprzęgające używa narzędzia items.index do indeksowania elementów. Element przechodzi w stan ACCEPTED dopiero po zakończeniu przetwarzania go przez Cloud Search.

  10. Na koniec funkcja deleteQueueItems jest wywoływana w kolejce A w celu usunięcia wszystkich wcześniej zindeksowanych elementów CCloud Search, które nadal mają etykietę „A”.

  11. Przy kolejnych pełnych przemierzeniach kolejka używana do indeksowania i kolejka używana do usuwania jest zamieniana.

Operacje kolejki (pakiet SDK oprogramowania sprzęgającego)

Pakiet Content Connector SDK umożliwia wykonywanie operacji na przekazywaniu elementów do kolejki i ich pobieraniu.

Aby spakować element i przenieść go do kolejki, użyj klasy konstruktora pushItems.

Aby pobierać elementy z kolejki do przetworzenia, nie musisz nic robić. Zamiast tego pakiet SDK automatycznie pobiera elementy z kolejki (w kolejności według priorytetu) za pomocą metody klasy getDoc Repozytorium.

Operacje kolejki (interfejs API REST)

Interfejs API REST udostępnia 2 metody przekazywania elementów do kolejki i ich pobierania:

  • Aby przekazać element do kolejki, użyj Items.push.
  • Do ankietowania elementów w kolejce służy Items.poll.

Za pomocą narzędzia Items.index możesz też przekazać elementy do kolejki podczas indeksowania. Elementy przeniesione do kolejki podczas indeksowania nie wymagają parametru type i automatycznie otrzymują stan ACCEPTED.

Items.push

Metoda Items.push dodaje identyfikatory do kolejki. Tę metodę można wywołać z określoną wartością type, która określa wynik operacji push. Listę wartości type znajdziesz w polu item.type w metodzie Items.push.

Przekazanie nowego identyfikatora powoduje dodanie nowego wpisu z kodem NEW_ITEM ItemStatus.

Opcjonalny ładunek jest zawsze przechowywany, traktowany jako wartość nieprzejrzysta i zwracany z Items.poll.

Gdy element jest ankietowany, jest zarezerwowany, co oznacza, że nie może zostać zwrócony przez kolejne wywołanie funkcji Items.poll. Użycie właściwości Items.push z wartością type jako NOT_MODIFIED, REPOSITORY_ERROR lub REQUEUE pozwala unieść zarezerwowane wyniki. Więcej informacji o zarezerwowanych i niezarezerwowanych wpisach znajdziesz w sekcji Items.poll.

Items.push z haszami

Interfejs Google Cloud Search API obsługuje określanie wartości metadanych i skrótu treści w żądaniach Items.index. Zamiast określać type, metadane lub wartości skrótu treści można określić w żądaniu push. Kolejka indeksowania w Cloud Search porównuje podane wartości skrótu z wartościami zapisanymi dostępnymi dla elementu w źródle danych. Jeśli nazwa nie będzie się zgadzać, ten wpis zostanie oznaczony jako MODIFIED. Jeśli danego elementu nie ma w indeksie, ma on stan NEW_ITEM.

Items.poll

Metoda Items.poll pobiera z kolejki wpisy o najwyższym priorytecie. Żądane i zwracane wartości stanu wskazują stan żądanych kolejek priorytetowych lub stan zwróconych identyfikatorów.

Domyślnie mogą być zwracane pozycje z dowolnej sekcji kolejki (na podstawie priorytetu). Każdy zwrócony wpis jest zarezerwowany i nie jest zwracany przez inne wywołania Items.poll, dopóki nie zostanie spełniony jeden z tych przypadków:

  • Upłynął limit czasu rezerwacji.
  • Wpis został ponownie dodany do kolejki przez użytkownika Items.index.
  • Funkcja Items.push jest wywoływana z wartością type NOT_MODIFIED, REPOSITORY_ERROR lub REQUEUE.