İçerik bağlayıcı, bir kurumsal depodaki verileri tarayan ve bir veri kaynağını dolduran bir yazılım programıdır. Google, içerik bağlayıcıları geliştirme konusunda aşağıdaki seçenekleri sunar:
İçerik Bağlayıcı SDK'sı. Bu, Java programcıları için iyi bir seçenektir. SDK, bağlayıcıları hızlı bir şekilde oluşturmanıza olanak tanıyan REST API'nin sarmalayıcısıdır. SDK'yı kullanarak içerik bağlayıcı oluşturmak için İçerik Bağlayıcı SDK'sını kullanarak içerik bağlayıcı oluşturma başlıklı makaleyi inceleyin.
Düşük düzeyli bir REST API veya API kitaplıkları. Java kullanmıyorsanız veya kod tabanınız bir REST API'yi ya da kitaplığı daha iyi destekliyorsa bu seçenekleri kullanın. REST API'yi kullanarak içerik bağlayıcı oluşturmak için REST API'yi kullanarak içerik bağlayıcı oluşturma başlıklı makaleyi inceleyin.
Tipik bir içerik bağlayıcı aşağıdaki görevleri yerine getirir:
- Yapılandırma parametrelerini okur ve işler.
- Üçüncü taraf deposundan "öğeler" adı verilen, dizine eklenebilir verilerin ayrı parçalarını çeker.
- Erişim kontrol listelerini, meta verileri ve içerik verilerini dizine eklenebilir öğeler halinde birleştirir.
- Öğeleri Cloud Search veri kaynağında dizine ekler.
- (İsteğe bağlı) Depodan gelen değişiklik bildirimlerini dinler. Değişiklik bildirimleri, Cloud Search veri kaynağının senkronize kalması için dizine ekleme isteklerine dönüştürülür. Bağlayıcı bu görevi yalnızca depo değişiklik algılamayı destekliyorsa gerçekleştirir.
Content Connector SDK'yı kullanarak içerik bağlayıcı oluşturma
Aşağıdaki bölümlerde, İçerik Bağlayıcı SDK'sını kullanarak nasıl içerik bağlayıcı oluşturacağınız açıklanmaktadır.
Bağımlılıkları ayarlama
Bu bağımlılıkları derleme dosyanıza ekleyin.
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'
Bağlayıcı yapılandırmanızı oluşturun
Her bağlayıcı, depo kimliğiniz gibi parametreler için bir yapılandırma dosyası kullanır.
Parametreleri anahtar-değer çiftleri olarak tanımlayın. Örneğin, api.sourceId=1234567890abcdef.
Google Cloud Search SDK, tüm bağlayıcılar için Google tarafından sağlanan parametreleri içerir. Yapılandırma dosyanızda aşağıdakileri belirtmeniz gerekir:
- İçerik bağlayıcı:
api.sourceIdveapi.serviceAccountPrivateKeyFileöğelerini beyan edin. Bunlar, deponuzu ve erişim için gereken özel anahtarı tanımlar.
- Kimlik bağlayıcı: Harici kimlik kaynağınızı tanımlamak için
api.identitySourceIdöğesini bildirin. Kullanıcı senkronizasyonu içinapi.customerId(Google Workspace hesabınızın benzersiz kimliği) değerini de beyan edin.
Diğer Google tarafından sağlanan parametreleri yalnızca varsayılan değerlerini geçersiz kılmak için bildirin. Kimlik ve anahtar oluşturma hakkında ayrıntılı bilgi için Google tarafından sağlanan parametreler başlıklı makaleyi inceleyin.
Yapılandırma dosyanızda depoya özgü parametreler de tanımlayabilirsiniz.
Yapılandırma dosyasını bağlayıcıya iletme
Yapılandırma dosyasını iletmek için config sistem özelliğini ayarlayın. Bağlayıcıyı başlatırken -D
argümanını kullanın. Örneğin:
java -classpath myconnector.jar -Dconfig=MyConfig.properties MyConnector
Bu bağımsız değişkeni atlarsanız SDK, yerel dizinde connector-config.properties adlı bir dosyayı kullanmaya çalışır.
Geçiş stratejinizi belirleme
İçerik bağlayıcının temel işlevi, bir depoyu geçerek verilerini dizine eklemektir. Deponuzun boyutuna ve düzenine göre bir strateji uygulamanız gerekir. Kendi stratejinizi tasarlayabilir veya SDK'dan bir strateji seçebilirsiniz:
- Tam geçiş stratejisi
- Deponun tamamını tarar ve her öğeyi indeksler. Bu strateji, her indeksleme sırasında tam geçişin ek yükünü karşılayabileceğiniz küçük depolar için en iyisidir. Çoğunlukla statik, hiyerarşik olmayan verilerin bulunduğu küçük depolarda veya değişiklik algılamanın zor olduğu durumlarda kullanın.
- Liste geçişi stratejisi
- Her öğenin durumunu belirlemek için tüm depoyu tarar, ardından yalnızca yeni veya güncellenmiş öğeleri indeksler. Değişiklik algılama desteklenmediğinde büyük ve hiyerarşik olmayan bir dizinde artımlı güncellemeler için bu yöntemi kullanın.
- Grafik geçişi
- Öğelerinin durumunu belirlemek için bir üst düğümü tarar, ardından bu düğümdeki yeni veya güncellenmiş öğeleri indeksler. Ardından, alt düğümleri yinelemeli olarak işler. Tüm kimliklerin listelenmesinin pratik olmadığı hiyerarşik depolar için (ör. dizin yapıları veya web siteleri) bunu kullanın.
SDK, bu stratejileri şablon bağlayıcı sınıflarında uygular. Bu şablonlar, geliştirme sürecinizi hızlandırabilir. Şablon kullanmak için ilgili bölüme bakın:
- Şablon sınıfı kullanarak tam geçiş bağlayıcısı oluşturma
- Şablon sınıfı kullanarak liste geçişi bağlayıcısı oluşturma
- Şablon sınıfı kullanarak grafik geçişi bağlayıcısı oluşturma
Şablon sınıfı kullanarak tam geçiş bağlayıcısı oluşturma
Bu bölümde, FullTraversalSample'daki koddan bahsedilmektedir.
Bağlayıcı giriş noktasını uygulama
Giriş noktası main() yöntemidir. Application örneği oluşturur ve bağlayıcıyı çalıştırmak için start() işlevini çağırır.
application.start() işlevini çağırmadan önce IndexingApplication.Builder sınıfını kullanarak FullTraversalConnector şablonunu oluşturun. Bu şablon, Repository nesnesini kabul eder.
SDK, initConfig() yöntem çağrılarınızdan sonra main() yöntemini çağırır
Application.build(). initConfig() yöntemi:
Configurationöğesinin daha önce başlatılmadığından emin olun.Configurationnesnesini Google tarafından sağlanan anahtar/değer çiftleriyle başlatır.
Depo arayüzünü uygulama
Repository nesnesi, depo öğelerini dolaşır ve dizine ekler. Şablon kullanırken yalnızca Repository arayüzündeki belirli yöntemleri geçersiz kılmanız gerekir. FullTraversalConnector için geçersiz kılma:
init(): Depo kurulumu ve başlatma için.getAllDocs(): Tüm öğeleri geçmek ve dizine eklemek için. Bu, planlanmış her geçiş için bir kez çağrılır.- (İsteğe bağlı)
getChanges(): Deponuz değişiklik algılamayı destekliyorsa değiştirilen öğeleri almak ve dizine eklemek için bu ayarı geçersiz kılın. - (İsteğe bağlı)
close(): Kapatma sırasında depoyu temizlemek için.
Her yöntem, IndexingService.indexItem() kullanılarak dizine ekleme işlemini gerçekleştiren bir ApiOperation nesnesi döndürür.
Özel yapılandırma parametrelerini alma
Bağlayıcınızın yapılandırmasını yönetmek için Configuration nesnesinden tüm özel parametreleri almanız gerekir. Bu görevi Repository sınıfınızın init() yönteminde gerçekleştirin.
Configuration sınıfı, farklı veri türlerini almak için yöntemler içerir.
Her yöntem bir ConfigValue nesnesi döndürür. Değeri almak için ConfigValue nesnesinin
get()
yöntemini kullanın. FullTraversalSample
kaynaklı bu snippet'te özel bir tam sayı değerinin nasıl alınacağı gösterilmektedir:
Birden fazla değere sahip parametreleri almak ve ayrıştırmak için Configuration sınıfının tür ayrıştırıcılarından birini kullanın. Eğitim bağlayıcısından alınan bu snippet, GitHub depo adlarının listesini almak için getMultiValue kullanır:
Tam geçiş gerçekleştirme
Tam geçiş gerçekleştirmek için geçersiz kılma getAllDocs(). Bu yöntem, kesintiye uğraması durumunda dizine ekleme işlemine devam etmek için bir kontrol noktası kabul eder. Her öğe için:
- İzinleri ayarlayın.
- Meta verileri ayarlayın.
- Bunları bir
RepositoryDocolarak birleştirin. - Her öğeyi
getAllDocs()tarafından döndürülen yineleyiciye paketleyin.
Öğe grubu tek bir arama için çok büyükse kontrol noktası kullanın ve hasMore(true) numaralı hattı arayın.
Bir öğenin izinlerini ayarlama
Depolar, bir öğeye erişimi olan kullanıcıları veya grupları belirlemek için Erişim Kontrol Listelerini (EKL'ler) kullanır. EKL, yetkili kullanıcıların veya grupların kimliklerini listeler.
Kullanıcıların yalnızca erişmeye yetkili oldukları arama sonuçlarını görmelerini sağlamak için deponuzun EKL'lerini kopyalamanız gerekir. Google Cloud Search'ün doğru erişim düzeyini sağlayabilmesi için bir öğeyi dizine eklerken ACL'yi ekleyin.
İçerik Bağlayıcı SDK'sı, çoğu deponun erişim kontrol listelerini modellemek için sınıflar ve yöntemler içerir. Deponuzun erişim kontrol listelerini analiz edin ve dizine ekleme sırasında Cloud Search için karşılık gelen erişim kontrol listeleri oluşturun. Devralmayı kullananlar gibi karmaşık erişim kontrol listelerini modellemek için dikkatli bir planlama gerekir. Daha fazla bilgi için Cloud Search ACL'leri başlıklı makaleyi inceleyin.
Erişimi ayarlamak için
Acl.Builder
sınıfını kullanın. Tam geçiş örneğindeki bu snippet, tüm alan kullanıcılarının (getCustomerPrincipal()) tüm öğeleri (setReaders()) okumasına olanak tanır:
Özellikle devralma modellerini kullanan depo erişim kontrol listelerinin doğru şekilde modellenmesi için Cloud Search erişim kontrol listelerindeki bilgiler gerekir.
Öğe için meta verileri ayarlama
Meta veriler Item nesnesinde depolanır. Item oluşturmak için benzersiz bir kimliğe, öğe türüne, ACL'ye, URL'ye ve sürüme ihtiyacınız vardır. IndexingItemBuilder yardımcı sınıfını kullanın.
Dizinlenebilir öğeyi oluşturma
RepositoryDoc.Builder sınıfını kullanın.
RepositoryDoc, IndexingService.indexItem() isteğini gerçekleştiren bir ApiOperation'dir.
Dizine ekleme isteğini ASYNCHRONOUS veya SYNCHRONOUS olarak ayarlamak için RepositoryDoc.Builder sınıfının setRequestMode() yöntemini kullanın:
ASYNCHRONOUS- Bu modda, dizine ekleme ile yayınlama arasındaki gecikme daha uzundur ancak daha yüksek bir işleme hızı kotası desteklenir. Bir deponun tamamının ilk dizine eklenmesi (dolgu) için eş zamansız modu kullanın.
SYNCHRONOUS- Bu modda, dizine ekleme ile yayınlama arasındaki gecikme süresi daha kısadır ancak işleme hızı kotası daha düşüktür. Depo güncellemelerini ve değişikliklerini dizine eklemek için eşzamanlı modu kullanın. İstek modu belirtilmezse varsayılan olarak
SYNCHRONOUSolur.
Dizinlenebilir her öğeyi bir yineleyicide paketleyin.
getAllDocs() yöntemi, CheckpointCloseableIterable RepositoryDoc nesneleri döndürür. CheckpointCloseableIterableImpl.Builder sınıfını kullanın.
Sonraki adımlar
- (İsteğe bağlı) Dizine ekleme işleme hızı düşükse Dizine ekleme hızını artırma başlıklı makaleyi inceleyin.
- (İsteğe bağlı) Kaynakları serbest bırakmak için
close()uygulayın. - (İsteğe bağlı) Kimlik bağlayıcı oluşturun.
Şablon sınıfı kullanarak liste geçişi bağlayıcısı oluşturma
Cloud Search dizine ekleme kuyruğunda, depo öğelerinin kimlikleri ve isteğe bağlı karma değerleri bulunur. Liste geçişi bağlayıcısı, kimlikleri bu sıraya gönderir ve dizine eklemek için alır. Cloud Search, öğe durumunu (ör. silme) belirlemek için bu sıraları kullanır. Cloud Search Dizine Ekleme Kuyruğu başlıklı makaleyi inceleyin.
Bu bölümde ListTraversalSample'a atıfta bulunulmaktadır.
Bağlayıcı giriş noktasını uygulama
main() yöntemi, bir Application örneği oluşturur ve start() işlevini çağırır. ListingConnector
şablonunu oluşturmak için
IndexingApplication.Builder kullanın.
Depo arayüzünü uygulama
ListingConnector için aşağıdaki yöntemleri geçersiz kılın:
init(): Depo kurulumu için.getIds(): Tüm kayıtların kimliklerini ve karma değerlerini almak için.getDoc(): Öğeleri dizine eklemek, güncellemek veya dizinden silmek için kullanılır.- (İsteğe bağlı)
getChanges(): Değişiklik algılama kullanılarak yapılan artımlı güncellemeler için. - (İsteğe bağlı)
close(): Depo temizliği için.
Liste geçişini gerçekleştirme
Kimlikleri ve karma değerlerini almak için getIds() değerini geçersiz kılın. Cloud Search dizine ekleme kuyruğundaki her öğeyi işlemek için getDoc() değerini geçersiz kılın.
Öğe kimliklerini ve karma değerlerini gönderme
Kimlikleri ve içerik karmalarını getirmek için getIds() değerini geçersiz kılın. Bunları bir PushItems dizin oluşturma sırası isteği olarak paketleyin.
Kimlikleri ve karma değerlerini paketlemek için PushItems.Builder kullanın.
Her öğeyi alıp işleme
Öğeleri dizine ekleme sırasına almak için getDoc() değerini geçersiz kılın. Öğeler yeni, değiştirilmiş, değiştirilmemiş veya silinmiş olabilir.
- Öğe kimliğinin depoda olup olmadığını kontrol edin. Değilse silin.
- Durum için dizine yoklama yapın. Değiştirilmediyse (
ACCEPTED) herhangi bir işlem yapmayın. - Dizine eklenen değiştirilmiş veya yeni öğeler: İzinleri ayarlayın, meta verileri ayarlayın,
RepositoryDociçine birleştirin ve döndürün.
Silinen öğeleri yönetme
Bu snippet, bir öğenin mevcut olup olmadığını belirleme ve mevcut değilse silme işleminin nasıl yapılacağını gösterir.
Değiştirilmeyen öğeleri işleme
Değişmeyen öğeleri işlemek için dizine ekleme sırasını yoklayın.
Örnekte, değişiklikleri algılamak için karma kullanılır.
Bir öğenin izinlerini ayarlama
Depolar, bir öğeye erişimi olan kullanıcıları veya grupları belirlemek için Erişim Kontrol Listelerini (EKL'ler) kullanır. EKL, yetkili kullanıcıların veya grupların kimliklerini listeler.
Kullanıcıların yalnızca erişmeye yetkili oldukları arama sonuçlarını görmelerini sağlamak için deponuzun EKL'lerini kopyalamanız gerekir. Google Cloud Search'ün doğru erişim düzeyini sağlayabilmesi için bir öğeyi dizine eklerken ACL'yi ekleyin.
İçerik Bağlayıcı SDK'sı, çoğu deponun erişim kontrol listelerini modellemek için sınıflar ve yöntemler içerir. Deponuzun erişim kontrol listelerini analiz edin ve dizine ekleme sırasında Cloud Search için karşılık gelen erişim kontrol listeleri oluşturun. Devralmayı kullananlar gibi karmaşık erişim kontrol listelerini modellemek için dikkatli bir planlama gerekir. Daha fazla bilgi için Cloud Search ACL'leri başlıklı makaleyi inceleyin.
Erişimi ayarlamak için
Acl.Builder
sınıfını kullanın. Tam geçiş örneğindeki bu snippet, tüm alan kullanıcılarının (getCustomerPrincipal()) tüm öğeleri (setReaders()) okumasına olanak tanır:
Özellikle devralma modellerini kullanan depo erişim kontrol listelerinin doğru şekilde modellenmesi için Cloud Search erişim kontrol listelerindeki bilgiler gerekir.
Öğe için meta verileri ayarlama
Dizinlenebilir öğe oluşturma
Dizine ekleme isteğini ASYNCHRONOUS veya SYNCHRONOUS olarak ayarlamak için RepositoryDoc.Builder sınıfının setRequestMode() yöntemini kullanın:
ASYNCHRONOUS- Bu modda, dizine ekleme ile yayınlama arasındaki gecikme daha uzundur ancak daha yüksek bir işleme hızı kotası desteklenir. Bir deponun tamamının ilk dizine eklenmesi (dolgu) için eş zamansız modu kullanın.
SYNCHRONOUS- Bu modda, dizine ekleme ile yayınlama arasındaki gecikme süresi daha kısadır ancak işleme hızı kotası daha düşüktür. Depo güncellemelerini ve değişikliklerini dizine eklemek için eşzamanlı modu kullanın. İstek modu belirtilmezse varsayılan olarak
SYNCHRONOUSolur.
Sonraki adımlar
İsterseniz aşağıdaki adımları uygulayabilirsiniz:
- (İsteğe bağlı) Kapatmadan önce kaynakları serbest bırakmak için
close()yöntemini uygulayın. - (İsteğe bağlı) İçerik Bağlayıcı SDK'sını kullanarak kimlik bağlayıcı oluşturun.
Şablon sınıfı kullanarak grafik geçişi bağlayıcısı oluşturma
Cloud Search dizine ekleme sırası, depodaki her öğe için kimlikleri ve isteğe bağlı karma değerlerini tutar. Grafik geçişi bağlayıcısı, öğe kimliklerini Google Cloud Search dizine ekleme sırasına gönderir ve dizine ekleme için bunları tek tek alır. Google Cloud Search, kuyrukları korur ve öğe durumunu (ör. bir öğenin depodan silinip silinmediği) belirlemek için kuyruk içeriklerini karşılaştırır. Cloud Search dizine ekleme sırası hakkında daha fazla bilgi için Google Cloud Search dizine ekleme sırası başlıklı makaleyi inceleyin.
Dizin oluşturma sırasında, öğe içeriği veri deposundan alınır ve tüm alt öğe kimlikleri sıraya gönderilir. Bağlayıcı, tüm öğeler işlenene kadar üst ve alt kimlikleri yinelemeli olarak işler.
Bağlayıcının giriş noktasını uygulama
Bir bağlayıcının giriş noktası main() yöntemidir. Bu yöntem, Application sınıfının bir örneğini oluşturur ve bağlayıcıyı çalıştırmak için start() yöntemini çağırır.
Çağırmadan önce
application.start(),
ListingConnector şablonunu oluşturmak için
IndexingApplication.Builder
sınıfını kullanın. ListingConnector, yöntemlerini uyguladığınız bir Repository nesnesini kabul eder.
Depo arayüzünü uygulama
init(), getIds(), getDoc() ve isteğe bağlı olarak getChanges() veya close() öğesini geçersiz kılın.
Grafik geçişini gerçekleştirme
İlk kimlikleri almak için getIds(), öğeleri işlemek ve alt öğe kimliklerini sıraya göndermek için getDoc() işlevini geçersiz kılın.
Öğe kimliklerini ve karma değerlerini gönderme
Her öğeyi alıp işleme
- Kimliğin depoda olup olmadığını kontrol edin. Aksi takdirde öğeyi silin.
- Mevcut öğeler için izinleri ve meta verileri ayarlayın ve bunları bir
RepositoryDociçinde birleştirin. - Alt öğe kimliklerini dizine ekleme sırasına gönderin.
RepositoryDocöğesini iade edin.
Silinen öğeleri yönetme
Meta verileri ayarlama ve öğeyi oluşturma
Alt öğe kimliklerini dizine ekleme sırasına yerleştirme
REST API'yi kullanarak içerik bağlayıcısı oluşturma
Aşağıdaki bölümlerde, REST API'yi kullanarak nasıl içerik bağlayıcı oluşturacağınız açıklanmaktadır.
Geçiş stratejinizi belirleme
Stratejiler (Tam, Liste ve Grafik), SDK'dakiyle aynıdır. REST API'yi kullanarak seçtiğiniz stratejiyi uygulayın.
Geçiş stratejinizi uygulama ve öğeleri dizine ekleme
Şemanızı kaydedin, ardından dizini aşağıdaki yöntemlerle doldurun:
- (İsteğe bağlı)
items.upload100 KiB'tan büyük dosyalar için. - (İsteğe bağlı) Medya dosyaları için
media.upload items.indexöğeyi dizine eklemek için.Örnek dizine ekleme isteği:
{ "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" }(İsteğe bağlı) Dizine eklemeyi doğrulamak için
items.getsimgesini kullanın.
Depo değişikliklerini işleme
Tam dizin oluşturma için tüm depoyu düzenli olarak yeniden dizine ekleyin. Liste veya grafik geçişi için değişiklikleri izlemek ve yalnızca değişenleri dizine eklemek üzere Google Cloud Indexing Queue'yu kullanın. Sıraya öğe eklemek için items.push simgesini kullanın.