Wtyczka treści to program, który przeszukuje dane w repozytorium przedsiębiorstwa i wypełnia źródło danych. Google udostępnia te opcje tworzenia oprogramowania sprzęgającego treści:
Pakiet SDK łącznika treści. To dobre rozwiązanie dla programistów Java. Pakiet SDK to otoczka interfejsu API typu REST, która umożliwia szybkie tworzenie oprogramowania sprzęgającego. Aby utworzyć oprogramowanie sprzęgające treści za pomocą pakietu SDK, zapoznaj się z artykułem Tworzenie oprogramowania sprzęgającego treści za pomocą pakietu SDK Content Connector.
interfejs REST API niskiego poziomu lub biblioteki interfejsów API. Skorzystaj z tych opcji, jeśli nie używasz Javy lub jeśli baza kodu lepiej obsługuje interfejs API REST lub bibliotekę. Aby utworzyć oprogramowanie sprzęgające treści za pomocą interfejsu API REST, zapoznaj się z artykułem Tworzenie oprogramowania sprzęgającego treści za pomocą interfejsu API REST.
Typowy łącznik treści wykonuje te zadania:
- Odczytuje i przetwarza parametry konfiguracji.
- Pobiera z repozytorium innej firmy oddzielne fragmenty danych, które można indeksować, zwane „elementami”.
- Łączy listy kontroli dostępu, metadane i dane treści w indeksowane elementy.
- Indeksuje elementy w źródle danych Cloud Search.
- (Opcjonalnie) Nasłuchuje powiadomień o zmianach w repozytorium. Powiadomienia o zmianach są przekształcane w prośby o indeksowanie, aby zachować synchronizację źródła danych Cloud Search. Oprogramowanie sprzęgające wykonuje to zadanie tylko wtedy, gdy repozytorium obsługuje wykrywanie zmian.
Tworzenie oprogramowania sprzęgającego treści za pomocą pakietu SDK Content Connector
W sekcjach poniżej znajdziesz informacje o tym, jak utworzyć oprogramowanie sprzęgające treści za pomocą pakietu SDK oprogramowania sprzęgającego treści.
Konfigurowanie zależności
Uwzględnij te zależności w pliku kompilacji.
Maven
xml
<dependency>
<groupId>com.google.enterprise.cloudsearch</groupId>
<artifactId>google-cloudsearch-indexing-connector-sdk</artifactId>
<version>v1-0.0.3</version>
</dependency>
Gradle
groovy
compile group: 'com.google.enterprise.cloudsearch',
name: 'google-cloudsearch-indexing-connector-sdk',
version: 'v1-0.0.3'
Tworzenie konfiguracji oprogramowania sprzęgającego
Każde oprogramowanie sprzęgające używa pliku konfiguracji do określania parametrów, takich jak identyfikator repozytorium.
Zdefiniuj parametry jako pary klucz-wartość, np. api.sourceId=1234567890abcdef.
Pakiet Google Cloud Search SDK zawiera parametry dostarczone przez Google dla wszystkich łączników. W pliku konfiguracyjnym musisz zadeklarować te elementy:
- Łącznik treści: zadeklaruj
api.sourceIdiapi.serviceAccountPrivateKeyFile. Określają one Twoje repozytorium i klucz prywatny potrzebny do uzyskania dostępu.
- Łącznik tożsamości: zadeklaruj
api.identitySourceId, aby zidentyfikować zewnętrzne źródło tożsamości. W przypadku synchronizacji użytkowników zadeklaruj teżapi.customerId(unikalny identyfikator konta Google Workspace).
Deklaruj inne parametry dostarczane przez Google tylko wtedy, gdy chcesz zastąpić ich wartości domyślne. Szczegółowe informacje o generowaniu identyfikatorów i kluczy znajdziesz w sekcji Parametry dostarczane przez Google.
W pliku konfiguracyjnym możesz też zdefiniować parametry specyficzne dla repozytorium.
Przekazywanie pliku konfiguracji do oprogramowania sprzęgającego
Ustaw właściwość systemową config, aby przekazać plik konfiguracji. Podczas uruchamiania oprogramowania sprzęgającego użyj argumentu -D. Na przykład:
java -classpath myconnector.jar -Dconfig=MyConfig.properties MyConnector
Jeśli pominiesz ten argument, pakiet SDK spróbuje użyć pliku o nazwie
connector-config.properties w katalogu lokalnym.
Określ strategię przechodzenia
Główną funkcją łącznika treści jest przeszukiwanie repozytorium i indeksowanie jego danych. Musisz wdrożyć strategię opartą na rozmiarze i układzie repozytorium. Możesz zaprojektować własną strategię lub wybrać jedną z dostępnych w pakiecie SDK:
- Strategia pełnego przechodzenia
- Skanuje całe repozytorium i indeksuje każdy element. Ta strategia jest najlepsza w przypadku małych repozytoriów, w których możesz sobie pozwolić na pełne przeszukiwanie podczas każdego indeksowania. Używaj go w przypadku małych repozytoriów zawierających głównie statyczne, niehierarchiczne dane lub gdy wykrywanie zmian jest trudne.
- Strategia przechodzenia listy
- Skanuje całe repozytorium, aby określić stan każdego elementu, a następnie indeksuje tylko nowe lub zaktualizowane elementy. Używaj tej metody do przyrostowych aktualizacji dużego, niehierarchicznego indeksu, gdy wykrywanie zmian nie jest obsługiwane.
- Przeszukiwanie grafu
- Skanuje węzeł nadrzędny, aby określić stan jego elementów, a następnie indeksuje nowe lub zaktualizowane elementy w tym węźle. Następnie rekursywnie przetwarza węzły podrzędne. Użyj tej opcji w przypadku repozytoriów hierarchicznych, w których wyświetlanie wszystkich identyfikatorów nie jest praktyczne, np. w przypadku struktur katalogów lub witryn.
Pakiet SDK implementuje te strategie w klasach szablonów oprogramowania sprzęgającego. Te szablony mogą przyspieszyć proces tworzenia. Aby użyć szablonu, zapoznaj się z odpowiednią sekcją:
- Tworzenie łącznika pełnego przeszukiwania za pomocą klasy szablonu
- Tworzenie łącznika przechodzenia po liście za pomocą klasy szablonu
- Tworzenie oprogramowania sprzęgającego przechodzenie po grafie za pomocą klasy szablonu
Tworzenie łącznika pełnego przechodzenia za pomocą klasy szablonu
Ta sekcja odnosi się do kodu z FullTraversalSample.
Wdrażanie punktu wejścia oprogramowania sprzęgającego
Punkt wejścia to metoda main(). Tworzy instancję Application i wywołuje start(), aby uruchomić oprogramowanie sprzęgające.
Przed wywołaniem funkcji application.start() użyj klasy
IndexingApplication.Builder
do utworzenia instancji szablonu
FullTraversalConnector. Ten szablon akceptuje obiekt Repository.
Pakiet SDK wywołuje funkcję initConfig() po wywołaniu metody main()Application.build(). Metoda initConfig():
- Sprawdza, czy element
Configurationnie został jeszcze zainicjowany. - Inicjuje obiekt
Configurationza pomocą par klucz-wartość dostarczonych przez Google.
Implementowanie interfejsu Repository
Obiekt Repository przechodzi i indeksuje elementy repozytorium. Jeśli używasz szablonu, musisz zastąpić tylko niektóre metody w interfejsie Repository. W przypadku FullTraversalConnector zastąp:
init(): do konfiguracji i inicjowania repozytorium.getAllDocs(): aby przechodzić i indeksować wszystkie elementy. Jest wywoływana raz dla każdego zaplanowanego przejścia.- (Opcjonalnie)
getChanges(): jeśli repozytorium obsługuje wykrywanie zmian, zastąp tę wartość, aby pobrać i zindeksować zmodyfikowane elementy. - (Opcjonalnie)
close(): do czyszczenia repozytorium podczas zamykania.
Każda metoda zwraca obiekt ApiOperation, który indeksuje za pomocą IndexingService.indexItem().
Pobieranie parametrów konfiguracji niestandardowej
Aby zarządzać konfiguracją konektora, musisz pobrać wszystkie parametry niestandardowe z obiektu Configuration. Wykonaj to zadanie w metodzie init() klasy Repository.
Klasa Configuration zawiera metody pobierania różnych typów danych.
Każda metoda zwraca obiekt ConfigValue. Aby pobrać wartość, użyj metody ConfigValue obiektu
get(). Ten fragment kodu z FullTraversalSample pokazuje, jak pobrać niestandardową wartość całkowitą:
Aby pobrać i przeanalizować parametry z wieloma wartościami, użyj jednego z analizatorów typów klasy Configuration. Ten fragment z samouczka dotyczącego łącznika
używa
getMultiValue
do pobrania listy nazw repozytoriów GitHub:
Przeprowadź pełne przeszukiwanie
Zastąp wartość getAllDocs(), aby przeprowadzić pełne przejście. Ta metoda akceptuje punkt kontrolny, aby wznowić indeksowanie w przypadku przerwania. W przypadku każdego elementu:
- Ustaw uprawnienia.
- Ustaw metadane.
- Połącz je w
RepositoryDoc. - Zapakuj każdy element do iteratora zwróconego przez
getAllDocs().
Jeśli zestaw produktów jest za duży, aby można go było pobrać w ramach jednego wywołania, użyj punktu kontrolnego i wywołaj funkcję
hasMore(true).
Ustawianie uprawnień do elementu
Repozytoria używają list kontroli dostępu (ACL), aby identyfikować użytkowników lub grupy, które mają dostęp do elementu. Lista ACL zawiera identyfikatory autoryzowanych użytkowników lub grup.
Aby użytkownicy widzieli tylko te wyniki wyszukiwania, do których mają dostęp, musisz odtworzyć listy ACL repozytorium. Podczas indeksowania elementu uwzględnij listę ACL, aby Google Cloud Search mógł zapewnić odpowiedni poziom dostępu.
Pakiet SDK łącznika treści zawiera klasy i metody modelowania list ACL większości repozytoriów. Analizowanie list ACL repozytorium i tworzenie odpowiednich list ACL dla Cloud Search podczas indeksowania. Modelowanie złożonych list ACL, takich jak te, które korzystają z dziedziczenia, wymaga starannego planowania. Więcej informacji znajdziesz w artykule Listy kontroli dostępu w Cloud Search.
Użyj klasy
Acl.Builder
, aby ustawić dostęp. Ten fragment pełnego przykładu przechodzenia umożliwia wszystkim użytkownikom domeny (getCustomerPrincipal()) odczytywanie wszystkich elementów (setReaders()):
Prawidłowe modelowanie list kontroli dostępu do repozytorium, zwłaszcza tych, które korzystają z modeli dziedziczenia, wymaga informacji zawartych w sekcji Listy kontroli dostępu w Cloud Search.
Ustawianie metadanych elementu
Metadane są przechowywane w obiekcie Item. Aby utworzyć Item, potrzebujesz unikalnego identyfikatora, typu elementu, listy kontroli dostępu, adresu URL i wersji. Użyj klasy pomocniczej
IndexingItemBuilder.
Tworzenie elementu, który można indeksować
Użyj klasy RepositoryDoc.Builder.
RepositoryDoc to ApiOperation, który wykonuje żądanie IndexingService.indexItem().
Użyj metody
setRequestMode()
klasy RepositoryDoc.Builder, aby ustawić żądanie indeksowania na
ASYNCHRONOUS lub SYNCHRONOUS:
ASYNCHRONOUS- Ten tryb ma dłuższe opóźnienie od indeksowania do wyświetlania, ale zapewnia większy limit przepustowości. Używaj trybu asynchronicznego do początkowego indeksowania (wypełniania wstecznego) całego repozytorium.
SYNCHRONOUS- Ten tryb ma mniejsze opóźnienie od indeksowania do wyświetlania, ale mniejszy limit przepustowości. Używaj trybu synchronicznego do indeksowania aktualizacji i zmian w repozytorium. Jeśli nie zostanie określony, domyślny tryb żądania to
SYNCHRONOUS.
Zapakuj każdy indeksowany element w iterator
Metoda getAllDocs() zwraca CheckpointCloseableIterable obiektów RepositoryDoc. Użyj klasy CheckpointCloseableIterableImpl.Builder.
Dalsze kroki
- (Opcjonalnie) Jeśli przepustowość indeksowania jest niska, zapoznaj się z artykułem Zwiększanie szybkości indeksowania.
- (Opcjonalnie) Zaimplementuj
close(), aby zwolnić zasoby. - (Opcjonalnie) Utwórz łącznik tożsamości.
Tworzenie łącznika przechodzenia po liście za pomocą klasy szablonu
Kolejka indeksowania w Cloud Search zawiera identyfikatory i opcjonalne hasze elementów repozytorium. Oprogramowanie sprzęgające przechodzące po liście umieszcza identyfikatory w tej kolejce i pobiera je do indeksowania. Cloud Search utrzymuje te kolejki, aby określać stan elementów, np. usunięć. Zobacz Kolejkę indeksowania Cloud Search.
Ta sekcja odnosi się do ListTraversalSample.
Wdrażanie punktu wejścia oprogramowania sprzęgającego
Metoda main() tworzy instancję Application i wywołuje start(). Użyj
IndexingApplication.Builder, aby utworzyć instancję szablonu
ListingConnector.
Implementowanie interfejsu Repository
Zastąp te metody dla ListingConnector:
init(): do konfiguracji repozytorium.getIds(): Aby pobrać identyfikatory i wartości hash wszystkich rekordów.getDoc(): dodawanie, aktualizowanie lub usuwanie elementów z indeksu.- (Opcjonalnie)
getChanges(): w przypadku aktualizacji przyrostowych z wykorzystaniem wykrywania zmian. - (Opcjonalnie)
close(): do czyszczenia repozytorium.
Przejdź przez listę
Zastąp getIds(), aby pobrać identyfikatory i wartości hash. Zastąp getDoc(), aby obsługiwać każdy element w kolejce indeksowania Cloud Search.
Przesyłanie identyfikatorów produktów i wartości skrótu
Zastąp getIds(), aby pobrać identyfikatory i hasze treści. Spakuj je w PushItems prośbę do kolejki indeksowania.
Użyj znaku PushItems.Builder, aby spakować identyfikatory i wartości hash.
Pobieranie i obsługa każdego elementu
Zastąp getDoc(), aby obsługiwać elementy w kolejce indeksowania. Elementy mogą być nowe, zmodyfikowane, niezmienione lub usunięte.
- Sprawdź, czy identyfikator produktu znajduje się w repozytorium. W przeciwnym razie usuń go.
- Sprawdź stan indeksu. Jeśli nie zmieniono (
ACCEPTED), nie rób nic. - Indeksowanie zmienionych lub nowych elementów: ustawianie uprawnień, ustawianie metadanych, łączenie w
RepositoryDoci zwracanie.
Obsługa usuniętych elementów
Ten fragment kodu pokazuje, jak sprawdzić, czy element istnieje, i jak go usunąć, jeśli nie istnieje.
Obsługa niezmienionych elementów
Sprawdzaj kolejkę indeksowania, aby obsługiwać niezmienione elementy.
W przykładzie do wykrywania zmian używany jest hash.
Ustawianie uprawnień do elementu
Repozytoria używają list kontroli dostępu (ACL), aby identyfikować użytkowników lub grupy, które mają dostęp do elementu. Lista ACL zawiera identyfikatory autoryzowanych użytkowników lub grup.
Aby użytkownicy widzieli tylko te wyniki wyszukiwania, do których mają dostęp, musisz odtworzyć listy ACL repozytorium. Podczas indeksowania elementu uwzględnij listę ACL, aby Google Cloud Search mógł zapewnić odpowiedni poziom dostępu.
Pakiet SDK łącznika treści zawiera klasy i metody modelowania list ACL większości repozytoriów. Analizowanie list ACL repozytorium i tworzenie odpowiednich list ACL dla Cloud Search podczas indeksowania. Modelowanie złożonych list ACL, takich jak te, które korzystają z dziedziczenia, wymaga starannego planowania. Więcej informacji znajdziesz w artykule Listy kontroli dostępu w Cloud Search.
Użyj klasy
Acl.Builder
, aby ustawić dostęp. Ten fragment pełnego przykładu przechodzenia umożliwia wszystkim użytkownikom domeny (getCustomerPrincipal()) odczytywanie wszystkich elementów (setReaders()):
Prawidłowe modelowanie list kontroli dostępu do repozytorium, zwłaszcza tych, które korzystają z modeli dziedziczenia, wymaga informacji zawartych w sekcji Listy kontroli dostępu w Cloud Search.
Ustawianie metadanych elementu
Tworzenie elementu, który można indeksować
Użyj metody
setRequestMode()
klasy RepositoryDoc.Builder, aby ustawić żądanie indeksowania na
ASYNCHRONOUS lub SYNCHRONOUS:
ASYNCHRONOUS- Ten tryb ma dłuższe opóźnienie od indeksowania do wyświetlania, ale zapewnia większy limit przepustowości. Używaj trybu asynchronicznego do początkowego indeksowania (wypełniania wstecznego) całego repozytorium.
SYNCHRONOUS- Ten tryb ma mniejsze opóźnienie od indeksowania do wyświetlania, ale mniejszy limit przepustowości. Używaj trybu synchronicznego do indeksowania aktualizacji i zmian w repozytorium. Jeśli nie zostanie określony, domyślny tryb żądania to
SYNCHRONOUS.
Dalsze kroki
Oto kilka kolejnych kroków, które możesz podjąć:
- (opcjonalnie) Zaimplementuj metodę
close(), aby zwolnić zasoby przed wyłączeniem. - (opcjonalnie) Utwórz oprogramowanie sprzęgające tożsamości za pomocą pakietu SDK oprogramowania sprzęgającego treści.
Tworzenie łącznika przechodzenia po grafie za pomocą klasy szablonu
Kolejka indeksowania Cloud Search zawiera identyfikatory i opcjonalne wartości skrótu każdego elementu w repozytorium. Łącznik przechodzenia po grafie przesyła identyfikatory elementów do kolejki indeksowania Google Cloud Search i pobiera je pojedynczo na potrzeby indeksowania. Cloud Search utrzymuje kolejki i porównuje ich zawartość, aby określić stan elementu, np. czy został on usunięty z repozytorium. Więcej informacji o kolejce indeksowania Cloud Search znajdziesz w artykule Kolejka indeksowania Google Cloud Search.
Podczas indeksowania zawartość elementu jest pobierana z repozytorium danych, a wszystkie identyfikatory elementów podrzędnych są umieszczane w kolejce. Oprogramowanie sprzęgające przetwarza rekurencyjnie identyfikatory nadrzędne i podrzędne, dopóki nie zostaną obsłużone wszystkie elementy.
Wdróż punkt wejścia oprogramowania sprzęgającego
Punktem wejścia do łącznika jest metoda main(). Ta metoda tworzy instancję klasy Application i wywołuje jej metodę start(), aby uruchomić oprogramowanie sprzęgające.
Przed wywołaniem funkcji
application.start()
użyj klasy
IndexingApplication.Builder
do utworzenia instancji szablonu ListingConnector. Interfejs ListingConnector akceptuje obiekt Repository, którego metody implementujesz.
Implementowanie interfejsu Repository
Zastąp init(), getIds(), getDoc() i opcjonalnie getChanges() lub close().
Wykonaj przeszukiwanie grafu
Zastąp getIds(), aby pobrać początkowe identyfikatory, i getDoc(), aby obsługiwać elementy i przesyłać identyfikatory podrzędne do kolejki.
Przesyłanie identyfikatorów produktów i wartości skrótu
Pobieranie i obsługa każdego elementu
- Sprawdź, czy identyfikator znajduje się w repozytorium. Jeśli nie, usuń element.
- W przypadku istniejących elementów ustaw uprawnienia i metadane, a następnie połącz je w
RepositoryDoc. - Przekaż identyfikatory elementów podrzędnych do kolejki indeksowania.
- Zwróć
RepositoryDoc.
Obsługa usuniętych elementów
Ustawianie metadanych i tworzenie elementu
Umieszczanie identyfikatorów elementów podrzędnych w kolejce indeksowania
Tworzenie oprogramowania sprzęgającego treści za pomocą interfejsu API REST
W sekcjach poniżej znajdziesz informacje o tym, jak utworzyć oprogramowanie sprzęgające treści za pomocą interfejsu API typu REST.
Określ strategię przechodzenia
Strategie (Pełna, Lista i Wykres) są koncepcyjnie takie same jak w przypadku pakietu SDK. Wdróż wybraną strategię za pomocą interfejsu REST API.
Wdrażanie strategii przechodzenia i indeksowanie elementów
Zarejestruj schemat, a następnie wypełnij indeks, używając tego polecenia:
- (Opcjonalnie)
items.uploadw przypadku plików większych niż 100 KiB. - (Opcjonalnie)
media.uploadw przypadku plików multimedialnych. items.indexaby zindeksować element.Przykładowa prośba o zindeksowanie:
{ "name": "datasource/<data_source_id>/items/titanic", "acl": { "readers": [ { "gsuitePrincipal": { "gsuiteDomain": true } } ] }, "metadata": { "title": "Titanic", "viewUrl": "http://www.imdb.com/title/tt2234155/", "objectType": "movie" }, "structuredData": { "object": { "properties": [ { "name": "movieTitle", "textValues": { "values": ["Titanic"] } } ] } }, "content": { "inlineContent": "A seventeen-year-old aristocrat falls in love...", "contentFormat": "TEXT" }, "version": "01", "itemType": "CONTENT_ITEM" }(Opcjonalnie) Aby sprawdzić indeksowanie, użyj narzędzia
items.get.
Obsługa zmian w repozytorium
Okresowo ponownie indeksuj całe repozytorium, aby uzyskać pełne indeksowanie. W przypadku przechodzenia po liście lub grafie używaj kolejki indeksowania Google Cloud, aby śledzić zmiany i indeksować tylko to, co się zmieniło. Użyj items.push, aby dodać elementy do kolejki.