İçerik bağlayıcı, bir işletmenin deposundaki verileri aktarmak ve bir veri kaynağını doldurmak için kullanılan yazılım programıdır. Google, içerik bağlayıcıları geliştirmek için aşağıdaki seçenekleri sunar:
Content Connector SDK'sı. Java'da programlama yapıyorsanız bu iyi bir seçenektir. Content Connector SDK, REST API'nin çevresinde yer alan ve bağlayıcıları hızlıca oluşturmanıza olanak tanıyan bir sarmalayıcıdır. SDK'yı kullanarak içerik bağlayıcı oluşturmak için Content Connector SDK'sını kullanarak içerik bağlayıcı oluşturma bölümüne bakın.
Alt düzey REST API veya API kitaplıkları. Java'da programlama yapmıyorsanız veya kod tabanınız bir REST API'yi veya kitaplığı daha iyi barındırıyorsa 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 bölümüne bakın.
Tipik bir içerik bağlayıcı aşağıdaki görevleri gerçekleştirir:
- Yapılandırma parametrelerini okur ve işler.
- Üçüncü taraf içerik veri havuzundan, "items" adlı ayrı dizine eklenebilir veri parçalarını çeker.
- EKL'leri, meta verileri ve içerik verilerini dizine eklenebilir öğeler halinde birleştirir.
- Öğeleri Cloud Search veri kaynağına dizine ekler.
- (isteğe bağlı) Üçüncü taraf içerik deposundan bildirimleri değiştirmeyi dinler. Cloud Search veri kaynağını üçüncü taraf deposuyla senkronize tutmak için değişiklik bildirimleri, dizine ekleme isteklerine dönüştürülür. Bağlayıcı, bu görevi yalnızca depo, değişiklik algılamayı destekliyorsa uygular.
Content Connector SDK'sını kullanarak içerik bağlayıcı oluşturma
Aşağıdaki bölümlerde, Content Connector SDK'sı kullanılarak nasıl içerik bağlayıcı oluşturulacağı açıklanmaktadır.
Bağımlılık oluşturma
SDK'yı kullanmak için derleme dosyanıza belirli bağımlılıkları eklemeniz gerekir. Derleme ortamınızın bağımlılıklarını görüntülemek için aşağıdaki bir sekmeyi tıklayın:
Maven
<dependency>
<groupId>com.google.enterprise.cloudsearch</groupId>
<artifactId>google-cloudsearch-indexing-connector-sdk</artifactId>
<version>v1-0.0.3</version>
</dependency>
Gradle
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ının, depo tarafından kullanılan kimlik gibi, bağlayıcı tarafından kullanılan parametreleri içeren bir yapılandırma dosyası vardır. Parametreler, api.sourceId=1234567890abcdef
gibi anahtar/değer çiftleri olarak tanımlanır.
Google Cloud Search SDK'sı, tüm bağlayıcılar tarafından kullanılan, Google tarafından sağlanan çeşitli yapılandırma parametrelerini içerir. Google tarafından sağlanan aşağıdaki parametreleri yapılandırma dosyanızda bildirmeniz gerekir:
- İçerik bağlayıcı söz konusu olduğunda, bu parametreler depoya erişmek için gereken deponuzun ve özel anahtarınızın konumunu tanımladığından
api.sourceId
veapi.serviceAccountPrivateKeyFile
beyan etmeniz gerekir.
- Bir kimlik bağlayıcısı için
api.identitySourceId
parametresi, harici kimlik kaynağınızın konumunu tanımladığından bunu bildirmeniz gerekir. Kullanıcıları senkronize ediyorsanızapi.customerId
hizmetinin, kuruluşunuzun Google Workspace hesabı için benzersiz kimlik olarak da beyan edilmesi gerekir.
Google tarafından sağlanan diğer parametrelerin varsayılan değerlerini geçersiz kılmak istemiyorsanız bunları yapılandırma dosyanızda bildirmeniz gerekmez. Google tarafından sağlanan yapılandırma parametreleri hakkında, belirli kimliklerin ve anahtarların nasıl oluşturulacağı gibi ek bilgiler için Google tarafından sağlanan yapılandırma parametrelerine bakın.
Yapılandırma dosyanızda kullanılacak, depoya özel parametreleri de tanımlayabilirsiniz.
Yapılandırma dosyasını bağlayıcıya iletin
Yapılandırma dosyasını bağlayıcınıza iletmek için config
sistem özelliğini ayarlayın. Bağlayıcıyı başlatırken -D
bağımsız değişkenini kullanarak özelliği ayarlayabilirsiniz. Örneğin, aşağıdaki komut bağlayıcıyı MyConfig.properties
yapılandırma dosyasıyla başlatır:
java -classpath myconnector.jar;... -Dconfig=MyConfig.properties MyConnector
Bu bağımsız değişken eksikse SDK, connector-config.properties
adlı varsayılan yapılandırma dosyasına erişmeye çalışır.
Geçiş stratejinizi belirleme
İçerik bağlayıcının birincil işlevi, bir depodan veri aktarmak ve verilerini dizine eklemektir. Deponuzdaki verilerin boyutuna ve düzenine bağlı olarak bir geçiş stratejisi uygulamanız gerekir. Kendi stratejinizi tasarlayabilir veya SDK'da uygulanan aşağıdaki stratejilerden birini seçebilirsiniz:
- Tam geçiş stratejisi
Tam geçiş stratejisi, deponun tamamını tarar ve her öğeyi kör olarak dizine ekler. Bu strateji genellikle küçük bir deponuz olduğunda kullanılır ve her dizine ekleme işleminizde tam geçiş yapmanın ek yüküne neden olabilir.
Bu geçiş stratejisi, çoğunlukla hiyerarşik olmayan, statik verileri olan küçük depolar için uygundur. Bu geçiş stratejisini, değişiklik algılaması zor olduğunda veya depo tarafından desteklenmediğinde de kullanabilirsiniz.
- Geçiş stratejisi listeleme
Liste geçiş stratejisi, tüm alt düğümler dahil olmak üzere deponun tamamını tarayıp her öğenin durumunu belirler. Ardından, bağlayıcı ikinci bir geçiş yapar ve yalnızca son dizine ekleme işleminden bu yana yeni veya güncellenmiş öğeleri dizine ekler. Bu strateji genellikle mevcut bir dizinde ek güncellemeler yapmak için kullanılır (dizini her güncellediğinizde tam bir geçiş yapmak yerine).
Bu geçiş stratejisi, değişiklik algılaması zor olduğunda veya veri havuzu tarafından desteklenmediğinde, hiyerarşik olmayan verileriniz olduğunda ve çok büyük veri kümeleriyle çalıştığınızda uygundur.
- Grafik geçişi
Grafik geçiş stratejisi, her bir öğenin durumunu belirlemek için üst düğümün tamamını tarar. Ardından, bağlayıcı ikinci bir geçiş yapar ve yalnızca kök düğümdeki öğeler yenidir veya son dizine ekleme işleminden sonra güncellenir. Son olarak bağlayıcı, tüm alt kimlikleri iletir. Ardından yeni veya güncellenmiş alt düğümlerdeki öğeleri dizine ekler. Bağlayıcı, tüm öğeler ele alınana kadar tüm alt düğümlerde yinelemeli olarak devam eder. Bu geçiş, genellikle tüm kimliklerin listelenmesinin pratik olmadığı hiyerarşik depolar için kullanılır.
Bu strateji, taranması gereken bir dizi dizin veya web sayfası gibi hiyerarşik verileriniz varsa uygundur.
Bu geçiş stratejilerinin her biri, SDK'daki bir şablon bağlayıcı sınıfı tarafından uygulanır. Kendi geçiş stratejinizi uygulayabilirsiniz, ancak bu şablonlar bağlayıcınızın gelişimini büyük ölçüde hızlandırır. Bir şablon kullanarak bağlayıcı oluşturmak için geçiş stratejinize karşılık gelen bölüme ilerleyin:
- Şablon sınıfı kullanarak tam geçiş bağlayıcısı oluşturma
- Şablon sınıfı kullanarak liste geçiş bağlayıcısı oluşturma
- Şablon sınıfı kullanarak grafik geçiş bağlayıcısı oluşturma
Şablon sınıfı kullanarak tam geçiş bağlayıcısı oluşturma
Dokümanların bu bölümünde, FullTraversalSample örneğinden alınan kod snippet'leri açıklanmaktadır.
Bağlayıcının giriş noktasını uygulayın
Bağlayıcının giriş noktası, main()
yöntemidir. Bu yöntemin birincil görevi, Application
sınıfının bir örneğini oluşturmak ve bağlayıcıyı çalıştırmak için start()
yöntemini çağırmaktır.
application.start()
yöntemini çağırmadan önce FullTraversalConnector
şablonunu örneklendirmek için IndexingApplication.Builder
sınıfını kullanın. FullTraversalConnector
, yöntemlerini uyguladığınız bir Repository
nesnesini kabul eder. Aşağıdaki kod snippet'i, main()
yönteminin nasıl uygulanacağını gösterir:
Arka planda SDK, bağlayıcınızın main()
yöntemi çağrıldıktan sonra initConfig()
yöntemini Application.build
çağırır.
initConfig()
yöntemi aşağıdaki görevleri gerçekleştirir:
Configuration
işleminin başlatılmadığından emin olmak içinConfiguation.isInitialized()
yöntemini çağırır.- Google tarafından sağlanan anahtar/değer çiftleriyle bir
Configuration
nesnesi başlatır. Her anahtar/değer çifti,Configuration
nesnesinin içindeki birConfigValue
nesnesinde depolanır.
Repository
arayüzünü uygulama
Repository
nesnesinin tek amacı, depo öğelerinin geçişini ve dizine eklenmesini sağlamaktır. Şablon kullanırken içerik bağlayıcı oluşturmak için Repository
arayüzünde yalnızca belirli yöntemleri geçersiz kılmanız gerekir. Geçersiz kıldığınız yöntemler, kullandığınız şablona ve geçiş stratejisine bağlıdır. FullTraversalConnector
için aşağıdaki yöntemleri geçersiz kılın:
init()
yöntemi. Veri havuzu kurulumu ve başlatma işlemleri yapmak içininit()
yöntemini geçersiz kılın.getAllDocs()
yöntemi. Veri deposundaki tüm öğeleri yönlendirmek ve dizine eklemek içingetAllDocs()
yöntemini geçersiz kılın. Bu yöntem, planlanan her geçiş için bir kez çağrılır (yapılandırmanızda tanımlandığı şekilde).(isteğe bağlı)
getChanges()
yöntemi. Deponuz değişiklik algılamayı destekliyorsagetChanges()
yöntemini geçersiz kılın. Bu yöntem, değiştirilen öğeleri almak ve dizine eklemek için planlanan her bir artımlı geçiş (yapılandırmanız tarafından tanımlandığı şekilde) için bir kez çağrılır.(isteğe bağlı)
close()
yöntemi. Depo temizleme işlemi gerçekleştirmeniz gerekiyorsaclose()
yöntemini geçersiz kılın. Bağlayıcının kapatılması sırasında bu yöntem bir kez çağrılır.
Repository
nesnesinin yöntemlerinden her biri, bir tür ApiOperation
nesnesi döndürür. Bir ApiOperation
nesnesi, deponuzun gerçek dizine eklenmesini sağlamak için tek veya birkaç IndexingService.indexItem()
çağrısı şeklinde bir işlem gerçekleştirir.
Özel yapılandırma parametreleri alma
Bağlayıcınızın yapılandırmasını yönetirken, özel parametreleri Configuration
nesnesinden almanız gerekir. Bu görev genellikle bir Repository
sınıfının init()
yönteminde gerçekleştirilir.
Configuration
sınıfı, bir yapılandırmadan farklı veri türleri almaya yönelik birkaç yöntem sunar. Her yöntem bir ConfigValue
nesnesi döndürür. Ardından, gerçek değeri almak için ConfigValue
nesnesinin get()
yöntemini kullanırsınız.
Aşağıdaki snippet'te (FullTraversalSample
) Configuration
nesnesinden tek bir özel tam sayı değerinin nasıl alınacağını görebilirsiniz:
Birkaç değer içeren bir parametre almak ve ayrıştırmak için Configuration
sınıfı türündeki ayrıştırıcılardan birini kullanarak verileri ayrı parçalara ayırın.
Eğitim bağlayıcısındaki aşağıdaki snippet'te, bir GitHub deposu adı listesi almak için getMultiValue
yöntemi kullanılır:
Tam geçiş yapma
Geçişi tam olarak gerçekleştirmek ve deponuzu dizine eklemek için getAllDocs()
parametresini geçersiz kılın. getAllDocs()
yöntemi, bir kontrol noktasını kabul eder. İşlem kesintiye uğrarsa belirli bir öğede dizine ekleme işlemini devam ettirmek için kontrol noktası kullanılır. Deponuzdaki her öğe için getAllDocs()
yönteminde şu adımları uygulayın:
- İzinleri ayarlayın.
- Dizine eklediğiniz öğenin meta verilerini ayarlayın.
- Meta verileri ve öğeyi dizine eklenebilir tek bir
RepositoryDoc
altında birleştirin. - Dizine eklenebilir her öğeyi
getAllDocs()
yöntemi tarafından döndürülen bir iterasyon öğesi halinde paketleyin.getAllDocs()
, aslındaApiOperation
nesnelerinden oluşan bir iterasyon olan birCheckpointCloseableIterable
döndürür. Her nesne, birRepositoryDoc
cihazda gerçekleştirilen API isteğini temsil eder (dizine ekleme gibi).
Bir grup öğe, tek bir çağrıda işlenemeyecek kadar büyükse bir kontrol noktası ekleyin ve hasMore(true)
öğesini, dizine eklenebilecek daha fazla öğe olduğunu gösterecek şekilde ayarlayın.
Bir öğenin izinlerini ayarlama
Deponuz, bir öğeye erişimi olan kullanıcıları veya grupları tanımlamak için bir Erişim Kontrol Listesi (EKL) kullanır. EKL, öğeye erişebilen gruplar veya kullanıcılar için bir kimlik listesidir.
Yalnızca bir öğeye erişimi olan kullanıcıların arama sonuçlarında bu öğeyi görebilmesi için deponuz tarafından kullanılan EKL'yi kopyalamanız gerekir. Google Cloud Search'ün bir öğeye doğru erişim düzeyini sağlamak için gerekli bilgilere sahip olması amacıyla, öğeyi dizine eklerken bir öğenin EKL'si eklenmelidir.
Content Connector SDK'sı, çoğu deponun EKL'lerini modellemek için zengin bir EKL sınıf seti ve yöntemi sağlar. Deponuzdaki her öğe için EKL'yi analiz etmeniz ve bir öğeyi dizine eklediğinizde Google Cloud Search için karşılık gelen bir EKL oluşturmanız gerekir. Deponuzun EKL'sinde EKL devralma gibi kavramlar kullanılıyorsa ilgili EKL'yi modellemek karmaşık olabilir. Google Cloud Search EKL'leri hakkında daha fazla bilgi için Google Cloud Search EKL'leri bölümünü inceleyin.
Not: Cloud Search dizine ekleme API'si, tek alanlı EKL'leri destekler. Alanlar arası EKL'leri desteklemez. EKL kullanarak her bir öğeye erişimi ayarlamak için Acl.Builder
sınıfını kullanın. Tüm geçiş örneğinden alınan aşağıdaki kod snippet'i, arama yaparken tüm kullanıcıların veya "ana hesabın" (getCustomerPrincipal()
) tüm öğelerin "okuyucuları" (.setReaders()
) olmasına olanak tanır.
Deponun EKL'lerini doğru bir şekilde modellemek için EKL'leri anlamanız gerekir. Örneğin, alt klasörlerin izinleri üst klasörlerden devraldığı bir tür devralma modeli kullanan dosya sistemindeki dosyaları dizine ekliyor olabilirsiniz. EKL'yi devralma modelleme, Google Cloud Search EKL'lerinde açıklanan ek bilgileri gerektirir
Bir öğenin meta verilerini ayarlama
Meta veriler bir Item
nesnesinde depolanır. Item
oluşturmak için öğenin en az benzersiz bir dize kimliği, öğe türü, EKL, URL'si ve sürümüne sahip olmanız gerekir.
Aşağıdaki kod snippet'i, IndexingItemBuilder
yardımcı sınıfını kullanarak nasıl Item
oluşturacağınızı gösterir.
Dizine eklenebilir öğe oluşturma
Öğenin meta verilerini belirledikten sonra, RepositoryDoc.Builder
sınıfını kullanarak gerçek dizine eklenebilir öğe oluşturabilirsiniz. Aşağıdaki örnekte dizine eklenebilir tek bir öğenin nasıl oluşturulacağı gösterilmektedir.
RepositoryDoc
, gerçek IndexingService.indexItem()
isteğini gerçekleştiren bir ApiOperation
türüdür.
Dizine ekleme isteğini ASYNCHRONOUS
veya SYNCHRONOUS
olarak tanımlamak için RepositoryDoc.Builder
sınıfının setRequestMode()
yöntemini de kullanabilirsiniz:
ASYNCHRONOUS
- Eşzamansız mod, dizine ekleme-sunuma gecikmesinin artmasını ve dizine ekleme istekleri için büyük işleme hızı kotasını karşılar. Deponun tamamının ilk dizine eklenmesi (dolgu) işlemi için eşzamansız modun kullanılması önerilir.
SYNCHRONOUS
- Eşzamanlı mod, dizine ekleme-sunum gecikme süresinin daha kısa olmasını sağlar ve sınırlı işleme hızı kotasına uyum sağlar. Depoda yapılan güncellemelerin ve değişikliklerin dizine eklenmesi için eşzamanlı mod önerilir. Belirtilmezse istek modu varsayılan olarak
SYNCHRONOUS
değerine ayarlanır.
Dizine eklenebilir her öğeyi bir iterasyon aracında paketleyin
getAllDocs()
yöntemi, bir RepositoryDoc
nesnesinden Iterator
, özellikle de CheckpointCloseableIterable
döndürür. Yineleyici oluşturmak ve döndürmek için CheckpointClosableIterableImpl.Builder
sınıfını kullanabilirsiniz. Aşağıdaki kod snippet'i, bir iteratörün nasıl oluşturulacağını ve döndürüleceğini gösterir.
SDK, yinelenen her bir dizine ekleme çağrısını yürütür.
Sonraki Adımlar
Atabileceğiniz adımlardan bazıları şunlardır:
- (isteğe bağlı) Dizine ekleme işleme hızınız yavaş görünüyorsa
FullTraversalConnector
için dizine ekleme oranını artırma başlıklı makaleyi inceleyin. - (İsteğe bağlı) Kapatmadan önce tüm kaynakları serbest bırakmak için
close()
yöntemini uygulayın. - (isteğe bağlı) Content Connector SDK'sını kullanarak bir kimlik bağlayıcı oluşturun.
Şablon sınıfı kullanarak liste geçiş bağlayıcısı oluşturma
Cloud Search Dizine Ekleme Sırası, depodaki her bir öğeye ait kimlikleri ve isteğe bağlı karma değerlerini bekletmek için kullanılır. Bir liste geçiş bağlayıcısı, öğe kimliklerini Google Cloud Search dizine ekleme sırasına aktarır ve dizine eklenmek için tek tek alır. Google Cloud Search, öğe durumunu (bir öğenin depodan silinip silinmediği gibi) belirlemek için sıraları korur ve sıra içeriklerini karşılaştırır. Cloud Search dizine ekleme sırası hakkında daha fazla bilgi edinmek için Cloud Search dizine ekleme sırası bölümüne bakın.
Dokümanların bu bölümünde, ListTraversalSample örneğinden alınan kod snippet'leri açıklanmaktadır.
Bağlayıcının giriş noktasını uygulayın
Bağlayıcının giriş noktası, main()
yöntemidir. Bu yöntemin birincil görevi, Application
sınıfının bir örneğini oluşturmak ve bağlayıcıyı çalıştırmak için start()
yöntemini çağırmaktır.
application.start()
yöntemini çağırmadan önce ListingConnector
şablonunu örneklendirmek için IndexingApplication.Builder
sınıfını kullanın. ListingConnector
, yöntemlerini uyguladığınız bir Repository
nesnesini kabul eder. Aşağıdaki snippet, ListingConnector
ve ilişkili Repository
öğesinin nasıl davet edileceğini gösterir:
Arka planda SDK, bağlayıcınızın main()
yöntemi çağrıldıktan sonra initConfig()
yöntemini Application.build
çağırır.
initConfig()
yöntemi:
Configuration
işleminin başlatılmadığından emin olmak içinConfiguation.isInitialized()
yöntemini çağırır.- Google tarafından sağlanan anahtar/değer çiftleriyle bir
Configuration
nesnesi başlatır. Her anahtar/değer çifti,Configuration
nesnesinin içindeki birConfigValue
nesnesinde depolanır.
Repository
arayüzünü uygulama
Repository
nesnesinin tek amacı, depo öğelerinin geçişini ve dizine eklenmesini sağlamaktır. Şablon kullanırken içerik bağlayıcı oluşturmak için yalnızca Repository
arayüzündeki belirli yöntemleri geçersiz kılmanız gerekir.
Geçersiz kıldığınız yöntemler, kullandığınız şablona ve geçiş stratejisine bağlıdır. ListingConnector
için aşağıdaki yöntemleri geçersiz kılın:
init()
yöntemi. Veri havuzu kurulumu ve başlatma işlemleri yapmak içininit()
yöntemini geçersiz kılın.getIds()
yöntemi. Depodaki tüm kayıtların kimliklerini ve karma değerlerini almak içingetIds()
yöntemini geçersiz kılın.getDoc()
yöntemi. Dizine yeni öğeler eklemek, mevcut öğeleri güncellemek, değiştirmek veya silmek içingetDoc()
yöntemini geçersiz kılın.(isteğe bağlı)
getChanges()
yöntemi. Deponuz değişiklik algılamayı destekliyorsagetChanges()
yöntemini geçersiz kılın. Bu yöntem, değiştirilen öğeleri almak ve dizine eklemek için planlanan her bir artımlı geçiş (yapılandırmanız tarafından tanımlandığı şekilde) için bir kez çağrılır.(isteğe bağlı)
close()
yöntemi. Depo temizleme işlemi gerçekleştirmeniz gerekiyorsaclose()
yöntemini geçersiz kılın. Bağlayıcının kapatılması sırasında bu yöntem bir kez çağrılır.
Repository
nesnesinin yöntemlerinden her biri, bir tür ApiOperation
nesnesi döndürür. Bir ApiOperation
nesnesi, deponuzun gerçek dizine eklenmesini sağlamak için tek veya birkaç IndexingService.indexItem()
çağrısı şeklinde bir işlem gerçekleştirir.
Özel yapılandırma parametreleri alma
Bağlayıcınızın yapılandırmasını yönetirken, özel parametreleri Configuration
nesnesinden almanız gerekir. Bu görev genellikle bir Repository
sınıfının init()
yönteminde gerçekleştirilir.
Configuration
sınıfı, bir yapılandırmadan farklı veri türleri almaya yönelik birkaç yöntem sunar. Her yöntem bir ConfigValue
nesnesi döndürür. Ardından, gerçek değeri almak için ConfigValue
nesnesinin get()
yöntemini kullanırsınız.
Aşağıdaki snippet'te (FullTraversalSample
) Configuration
nesnesinden tek bir özel tam sayı değerinin nasıl alınacağını görebilirsiniz:
Birkaç değer içeren bir parametre almak ve ayrıştırmak için Configuration
sınıfı türündeki ayrıştırıcılardan birini kullanarak verileri ayrı parçalara ayırın.
Eğitim bağlayıcısındaki aşağıdaki snippet'te, bir GitHub deposu adı listesi almak için getMultiValue
yöntemi kullanılır:
Liste geçişini gerçekleştir
Depodaki tüm kayıtların kimliklerini ve karma değerlerini almak için getIds()
yöntemini geçersiz kılın.
getIds()
yöntemi, bir kontrol noktasını kabul eder. Kontrol noktası, süreç kesintiye uğrarsa belirli bir öğenin dizine eklenmesini devam ettirmek için kullanılır.
Ardından, Cloud Search dizine ekleme sırasındaki her öğeyi işlemek için getDoc()
yöntemini geçersiz kılın.
Push öğesi kimlikleri ve karma değerleri
Depodan öğe kimliklerini ve ilişkili içerik karma değerlerini almak için getIds()
etiketini geçersiz kılın. Ardından kimlik ve karma değeri çiftleri, Cloud Search dizine ekleme sırasına aktarma işlemi isteği olarak paketlenir. Kök veya üst kimlikler genellikle tüm öğe hiyerarşisi işlenene kadar ilk olarak alt kimlikler aktarılır.
getIds()
yöntemi, dizine eklenecek son öğeyi temsil eden bir kontrol noktasını kabul eder. İşlem kesintiye uğrarsa belirli bir öğede dizine ekleme işlemine devam etmek için kontrol noktası kullanılabilir. Deponuzdaki her öğe için getIds()
yöntemini kullanarak aşağıdaki adımları uygulayın:
- Depodan her öğe kimliğini ve ilişkili karma değerini alın.
- Her kimliği ve karma değeri çiftini bir
PushItems
olarak paketleyin. - Her
PushItems
öğesini,getIds()
yöntemi tarafından döndürülen bir iterasyonda birleştirin.getIds()
işlevinin aslındaApiOperation
nesnelerinden oluşan birCheckpointCloseableIterable
döndürmesi olduğunu unutmayın. Bu nesne,RepositoryDoc
üzerinde gerçekleştirilen bir API isteğini temsil eden her nesne (ör. öğeleri sıraya aktarmak).
Aşağıdaki kod snippet'i, her bir öğe kimliğini ve karma değerini nasıl alacağınızı ve PushItems
öğesine nasıl ekleneceğini gösterir.
PushItems
, bir öğeyi Cloud Search Dizine Ekleme sırasına aktarmaya yönelik bir ApiOperation
isteğidir.
Aşağıdaki kod snippet'inde, kimlikleri ve karma değerlerini tek bir aktarma paketinde paketlemek için PushItems.Builder
sınıfının nasıl kullanılacağı gösterilmektedirApiOperation
.
Öğeler, daha fazla işlenmek üzere Cloud Search Dizine Ekleme Sırası'na aktarılır.
Her bir öğeyi alın ve işleyin
Cloud Search dizine ekleme sırasındaki her öğeyi işlemek için getDoc()
değerini geçersiz kılın.
Bir öğe yeni veya değiştirilmiş olabilir ya da artık kaynak veri havuzunda bulunamaz. Yeni veya değiştirilmiş her bir öğeyi alın ve dizine ekleyin. Artık kaynak depoda bulunmayan öğeleri dizinden kaldırın.
getDoc()
yöntemi, Google Cloud Search dizine ekleme sırasındaki bir öğeyi kabul eder. Sıradaki her öğe için getDoc()
yöntemini kullanarak şu adımları uygulayın:
Cloud Search Dizine Ekleme Sırası'nda öğe kimliğinin depoda olup olmadığını kontrol edin. Doğru değilse öğeyi dizinden silin.
Öğe durumunun dizinini sorgulayın. Bir öğede değişiklik olmazsa (
ACCEPTED
) hiçbir şey yapmayın.Dizin değişti veya yeni öğeler var:
- İzinleri ayarlayın.
- Dizine eklediğiniz öğenin meta verilerini ayarlayın.
- Meta verileri ve öğeyi dizine eklenebilir tek bir
RepositoryDoc
altında birleştirin. RepositoryDoc
değerini döndürün.
Not: ListingConnector
şablonu, getDoc()
yönteminde null
döndürülmesini desteklemez. null
sonucunu NullPointerException.
ile döndürür
Silinen öğeleri işleme
Aşağıdaki kod snippet'i, bir öğenin depoda olup olmadığını nasıl belirleyeceğinizi ve yoksa öğeyi nasıl sileceğinizi gösterir.
documents
veri havuzunu temsil eden bir veri yapısı olduğunu unutmayın. documentID
documents
öğesinde bulunamazsa öğeyi dizinden silmek için
APIOperations.deleteItem(resourceName)
döndürün.
Değişmeyen öğeleri işleme
Aşağıdaki kod snippet'i, Cloud Search Dizine Ekleme Sırası'nda öğe durumunun nasıl sorgulanacağını ve değiştirilmemiş bir öğenin nasıl işleneceğini gösterir.
Öğenin değiştirilip değiştirilmediğini belirlemek için öğenin durumunu ve herhangi bir değişiklik olduğunu gösterebilecek diğer meta verileri kontrol edin. Örnekte, öğenin değiştirilip değiştirilmediğini belirlemek için meta veri karması kullanılır.
Bir öğenin izinlerini ayarlama
Deponuz, bir öğeye erişimi olan kullanıcıları veya grupları tanımlamak için bir Erişim Kontrol Listesi (EKL) kullanır. EKL, öğeye erişebilen gruplar veya kullanıcılar için bir kimlik listesidir.
Yalnızca bir öğeye erişimi olan kullanıcıların arama sonuçlarında bu öğeyi görebilmesi için deponuz tarafından kullanılan EKL'yi kopyalamanız gerekir. Google Cloud Search'ün bir öğeye doğru erişim düzeyini sağlamak için gerekli bilgilere sahip olması amacıyla, öğeyi dizine eklerken bir öğenin EKL'si eklenmelidir.
Content Connector SDK'sı, çoğu deponun EKL'lerini modellemek için zengin bir EKL sınıf seti ve yöntemi sağlar. Deponuzdaki her öğe için EKL'yi analiz etmeniz ve bir öğeyi dizine eklediğinizde Google Cloud Search için karşılık gelen bir EKL oluşturmanız gerekir. Deponuzun EKL'sinde EKL devralma gibi kavramlar kullanılıyorsa ilgili EKL'yi modellemek karmaşık olabilir. Google Cloud Search EKL'leri hakkında daha fazla bilgi için Google Cloud Search EKL'leri bölümünü inceleyin.
Not: Cloud Search dizine ekleme API'si, tek alanlı EKL'leri destekler. Alanlar arası EKL'leri desteklemez. EKL kullanarak her bir öğeye erişimi ayarlamak için Acl.Builder
sınıfını kullanın. Tüm geçiş örneğinden alınan aşağıdaki kod snippet'i, arama yaparken tüm kullanıcıların veya "ana hesabın" (getCustomerPrincipal()
) tüm öğelerin "okuyucuları" (.setReaders()
) olmasına olanak tanır.
Deponun EKL'lerini doğru bir şekilde modellemek için EKL'leri anlamanız gerekir. Örneğin, alt klasörlerin izinleri üst klasörlerden devraldığı bir tür devralma modeli kullanan dosya sistemindeki dosyaları dizine ekliyor olabilirsiniz. EKL'yi devralma modelleme, Google Cloud Search EKL'lerinde açıklanan ek bilgileri gerektirir
Bir öğenin meta verilerini ayarlama
Meta veriler bir Item
nesnesinde depolanır. Item
oluşturmak için öğenin en az benzersiz bir dize kimliği, öğe türü, EKL, URL'si ve sürümüne sahip olmanız gerekir.
Aşağıdaki kod snippet'i, IndexingItemBuilder
yardımcı sınıfını kullanarak nasıl Item
oluşturacağınızı gösterir.
Dizine eklenebilir bir öğe oluşturma
Öğenin meta verilerini belirledikten sonra RepositoryDoc.Builder
öğesini kullanarak gerçek dizine eklenebilir öğe oluşturabilirsiniz.
Aşağıdaki örnekte dizine eklenebilir tek bir öğenin nasıl oluşturulacağı gösterilmektedir.
RepositoryDoc
, gerçek IndexingService.indexItem()
isteğini gerçekleştiren bir ApiOperation
türüdür.
Dizine ekleme isteğini ASYNCHRONOUS
veya SYNCHRONOUS
olarak tanımlamak için RepositoryDoc.Builder
sınıfının setRequestMode()
yöntemini de kullanabilirsiniz:
ASYNCHRONOUS
- Eşzamansız mod, dizine ekleme-sunuma gecikmesinin artmasını ve dizine ekleme istekleri için büyük işleme hızı kotasını karşılar. Deponun tamamının ilk dizine eklenmesi (dolgu) işlemi için eşzamansız modun kullanılması önerilir.
SYNCHRONOUS
- Eşzamanlı mod, dizine ekleme-sunum gecikme süresinin daha kısa olmasını sağlar ve sınırlı işleme hızı kotasına uyum sağlar. Depoda yapılan güncellemelerin ve değişikliklerin dizine eklenmesi için eşzamanlı mod önerilir. Belirtilmezse istek modu varsayılan olarak
SYNCHRONOUS
değerine ayarlanır.
Sonraki Adımlar
Atabileceğiniz adımlardan bazıları şunlardır:
- (İsteğe bağlı) Kapatmadan önce tüm kaynakları serbest bırakmak için
close()
yöntemini uygulayın. - (isteğe bağlı) Content Connector SDK'sını kullanarak bir kimlik bağlayıcı oluşturun.
Şablon sınıfı kullanarak grafik geçiş bağlayıcısı oluşturma
Cloud Search Dizine Ekleme Sırası, depodaki her bir öğeye ait kimlikleri ve isteğe bağlı karma değerlerini bekletmek için kullanılır. Grafik geçiş bağlayıcısı, öğe kimliklerini Google Cloud Search dizine ekleme sırasına aktarır ve dizine eklenmek için tek tek alır. Google Cloud Search sıraları korur ve sıra içeriklerini, bir öğenin depodan silinip silinmediği gibi belirlemek için 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ı bölümüne bakın.
Dizin sırasında, öğe içeriği veri deposundan getirilir ve tüm alt öğe kimlikleri sıraya aktarılır. Bağlayıcı, tüm öğeler işlenene kadar üst ve alt kimlikleri yinelenen bir şekilde işlemeye devam eder.
Dokümanların bu bölümünde, GraphTraversalSample örneğindeki kod snippet'leri ele alınmıştır.
Bağlayıcının giriş noktasını uygulayın
Bağlayıcının giriş noktası, main()
yöntemidir. Bu yöntemin birincil görevi, Application
sınıfının bir örneğini oluşturmak ve bağlayıcıyı çalıştırmak için start()
yöntemini çağırmaktır.
application.start()
bölümünü çağırmadan önce
IndexingApplication.Builder
sınıfını kullanarak ListingConnector
şablonunu oluşturun. ListingConnector
, yöntemlerini uyguladığınız bir Repository
nesnesini kabul eder.
Aşağıdaki snippet, ListingConnector
ve ilişkili Repository
öğesinin nasıl davet edileceğini gösterir:
Arka planda SDK, bağlayıcınızın main()
yöntemi çağrıldıktan sonra initConfig()
yöntemini Application.build
çağırır.
initConfig()
yöntemi:
Configuration
işleminin başlatılmadığından emin olmak içinConfiguation.isInitialized()
yöntemini çağırır.- Google tarafından sağlanan anahtar/değer çiftleriyle bir
Configuration
nesnesi başlatır. Her anahtar/değer çifti,Configuration
nesnesinin içindeki birConfigValue
nesnesinde depolanır.
Repository
arayüzünü uygulama
Repository
nesnesinin tek amacı, depo öğelerinin geçişini ve dizine eklenmesini sağlamaktır. Şablon kullanırken içerik bağlayıcı oluşturmak için yalnızca Repository
arayüzündeki belirli yöntemleri geçersiz kılmanız gerekir. Geçersiz kıldığınız yöntemler, şablona ve kullandığınız geçiş stratejisine bağlıdır. ListingConnector
için aşağıdaki yöntemleri geçersiz kılabilirsiniz:
init()
yöntemi. Veri havuzu kurulumu ve başlatma işlemleri yapmak içininit()
yöntemini geçersiz kılın.getIds()
yöntemi. Depodaki tüm kayıtların kimliklerini ve karma değerlerini almak içingetIds()
yöntemini geçersiz kılın.getDoc()
yöntemi. Dizine yeni öğeler eklemek, mevcut öğeleri güncellemek, değiştirmek veya silmek içingetDoc()
yöntemini geçersiz kılın.(isteğe bağlı)
getChanges()
yöntemi. Deponuz değişiklik algılamayı destekliyorsagetChanges()
yöntemini geçersiz kılın. Bu yöntem, değiştirilen öğeleri almak ve dizine eklemek için planlanan her bir artımlı geçiş (yapılandırmanız tarafından tanımlandığı şekilde) için bir kez çağrılır.(isteğe bağlı)
close()
yöntemi. Depo temizleme işlemi gerçekleştirmeniz gerekiyorsaclose()
yöntemini geçersiz kılın. Bağlayıcının kapatılması sırasında bu yöntem bir kez çağrılır.
Repository
nesnesinin yöntemlerinden her biri, bir ApiOperation
nesnesi türünü döndürür. Bir ApiOperation
nesnesi, deponuzun gerçek dizine eklenmesini gerçekleştirmek için tek veya birkaç IndexingService.indexItem()
çağrısı şeklinde bir işlem gerçekleştirir.
Özel yapılandırma parametreleri alma
Bağlayıcınızın yapılandırmasını yönetirken, özel parametreleri Configuration
nesnesinden almanız gerekir. Bu görev genellikle bir Repository
sınıfının init()
yönteminde gerçekleştirilir.
Configuration
sınıfı, bir yapılandırmadan farklı veri türleri almaya yönelik birkaç yöntem sunar. Her yöntem bir ConfigValue
nesnesi döndürür. Ardından, gerçek değeri almak için ConfigValue
nesnesinin get()
yöntemini kullanırsınız.
Aşağıdaki snippet'te (FullTraversalSample
) Configuration
nesnesinden tek bir özel tam sayı değerinin nasıl alınacağını görebilirsiniz:
Birkaç değer içeren bir parametre almak ve ayrıştırmak için Configuration
sınıfı türündeki ayrıştırıcılardan birini kullanarak verileri ayrı parçalara ayırın.
Eğitim bağlayıcısındaki aşağıdaki snippet'te, bir GitHub deposu adı listesi almak için getMultiValue
yöntemi kullanılır:
Grafik geçişini gerçekleştir
Depodaki tüm kayıtların kimliklerini ve karma değerlerini almak için getIds()
yöntemini geçersiz kılın.
getIds()
yöntemi, bir kontrol noktasını kabul eder. Kontrol noktası, süreç kesintiye uğrarsa belirli bir öğenin dizine eklenmesini devam ettirmek için kullanılır.
Ardından, Cloud Search dizine ekleme sırasındaki her öğeyi işlemek için getDoc()
yöntemini geçersiz kılın.
Push öğesi kimlikleri ve karma değerleri
Depodan öğe kimliklerini ve ilişkili içerik karma değerlerini almak için getIds()
etiketini geçersiz kılın. Ardından kimlik ve karma değeri çiftleri, Cloud Search dizine ekleme sırasına aktarma işlemi isteği olarak paketlenir. Kök veya üst kimlikler genellikle tüm öğe hiyerarşisi işlenene kadar ilk olarak alt kimlikler aktarılır.
getIds()
yöntemi, dizine eklenecek son öğeyi temsil eden bir kontrol noktasını kabul eder. İşlem kesintiye uğrarsa belirli bir öğede dizine ekleme işlemine devam etmek için kontrol noktası kullanılabilir. Deponuzdaki her öğe için getIds()
yöntemini kullanarak aşağıdaki adımları uygulayın:
- Depodan her öğe kimliğini ve ilişkili karma değerini alın.
- Her kimliği ve karma değeri çiftini bir
PushItems
olarak paketleyin. - Her
PushItems
öğesini,getIds()
yöntemi tarafından döndürülen bir iterasyonda birleştirin.getIds()
işlevinin aslındaApiOperation
nesnelerinden oluşan birCheckpointCloseableIterable
döndürmesi olduğunu unutmayın. Bu nesne,RepositoryDoc
üzerinde gerçekleştirilen bir API isteğini temsil eden her nesne (ör. öğeleri sıraya aktarmak).
Aşağıdaki kod snippet'i, her bir öğe kimliğini ve karma değerini nasıl alacağınızı ve PushItems
bölümüne nasıl ekleyeceğinizi gösterir. PushItems
, bir öğeyi Cloud Search dizine ekleme sırasına aktarmaya yönelik bir ApiOperation
isteğidir.
Aşağıdaki kod snippet'i, kimlikleri ve karma değerlerini tek bir aktarma ApiOperation
'te paketlemek için PushItems.Builder
sınıfının nasıl kullanılacağını gösterir.
Öğeler, daha fazla işlenmek üzere Cloud Search Dizine Ekleme Sırası'na aktarılır.
Her bir öğeyi alın ve işleyin
Cloud Search dizine ekleme sırasındaki her öğeyi işlemek için getDoc()
değerini geçersiz kılın.
Bir öğe yeni veya değiştirilmiş olabilir ya da artık kaynak veri havuzunda bulunamaz. Yeni veya değiştirilmiş her bir öğeyi alın ve dizine ekleyin. Artık kaynak depoda bulunmayan öğeleri dizinden kaldırın.
getDoc()
yöntemi, Cloud Search dizine ekleme sırasından bir öğeyi kabul eder. Sıradaki her öğe için getDoc()
yöntemini kullanarak şu adımları uygulayın:
Cloud Search Dizine Ekleme Sırası'ndaki öğe kimliğinin depoda olup olmadığını kontrol edin. Doğru değilse öğeyi dizinden silin. Öğe mevcutsa bir sonraki adımla devam edin.
Dizin değişti veya yeni öğeler var:
- İzinleri ayarlayın.
- Dizine eklediğiniz öğenin meta verilerini ayarlayın.
- Meta verileri ve öğeyi dizine eklenebilir tek bir
RepositoryDoc
altında birleştirin. - Daha fazla işlem görmesi için alt kimlikleri Cloud Search Dizine Ekleme Sırası'na yerleştirin.
RepositoryDoc
değerini döndürün.
Silinen öğeleri işleme
Aşağıdaki kod snippet'i, bir öğenin dizinde olup olmadığını nasıl belirleyeceğini ve yoksa silmemesini gösterir.
Bir öğenin izinlerini ayarlama
Deponuz, bir öğeye erişimi olan kullanıcıları veya grupları tanımlamak için bir Erişim Kontrol Listesi (EKL) kullanır. EKL, öğeye erişebilen gruplar veya kullanıcılar için bir kimlik listesidir.
Yalnızca bir öğeye erişimi olan kullanıcıların arama sonuçlarında bu öğeyi görebilmesi için deponuz tarafından kullanılan EKL'yi kopyalamanız gerekir. Google Cloud Search'ün bir öğeye doğru erişim düzeyini sağlamak için gerekli bilgilere sahip olması amacıyla, öğeyi dizine eklerken bir öğenin EKL'si eklenmelidir.
Content Connector SDK'sı, çoğu deponun EKL'lerini modellemek için zengin bir EKL sınıf seti ve yöntemi sağlar. Deponuzdaki her öğe için EKL'yi analiz etmeniz ve bir öğeyi dizine eklediğinizde Google Cloud Search için karşılık gelen bir EKL oluşturmanız gerekir. Deponuzun EKL'sinde EKL devralma gibi kavramlar kullanılıyorsa ilgili EKL'yi modellemek karmaşık olabilir. Google Cloud Search EKL'leri hakkında daha fazla bilgi için Google Cloud Search EKL'leri bölümünü inceleyin.
Not: Cloud Search dizine ekleme API'si, tek alanlı EKL'leri destekler. Alanlar arası EKL'leri desteklemez. EKL kullanarak her bir öğeye erişimi ayarlamak için Acl.Builder
sınıfını kullanın. Tüm geçiş örneğinden alınan aşağıdaki kod snippet'i, arama yaparken tüm kullanıcıların veya "ana hesabın" (getCustomerPrincipal()
) tüm öğelerin "okuyucuları" (.setReaders()
) olmasına olanak tanır.
Deponun EKL'lerini doğru bir şekilde modellemek için EKL'leri anlamanız gerekir. Örneğin, alt klasörlerin izinleri üst klasörlerden devraldığı bir tür devralma modeli kullanan dosya sistemindeki dosyaları dizine ekliyor olabilirsiniz. EKL'yi devralma modelleme, Google Cloud Search EKL'lerinde açıklanan ek bilgileri gerektirir
Bir öğenin meta verilerini ayarlama
Meta veriler bir Item
nesnesinde depolanır. Item
oluşturmak için öğenin en az benzersiz bir dize kimliği, öğe türü, EKL, URL'si ve sürümüne sahip olmanız gerekir.
Aşağıdaki kod snippet'i, IndexingItemBuilder
yardımcı sınıfını kullanarak nasıl Item
oluşturacağınızı gösterir.
Dizine eklenebilir öğe oluşturma
Öğenin meta verilerini belirledikten sonra RepositoryDoc.Builder
öğesini kullanarak gerçek dizine eklenebilir öğe oluşturabilirsiniz.
Aşağıdaki örnekte dizine eklenebilir tek bir öğenin nasıl oluşturulacağı gösterilmektedir.
RepositoryDoc
, gerçek IndexingService.indexItem()
isteğini gerçekleştiren bir ApiOperation
türüdür.
Dizine ekleme isteğini ASYNCHRONOUS
veya SYNCHRONOUS
olarak tanımlamak için RepositoryDoc.Builder
sınıfının setRequestMode()
yöntemini de kullanabilirsiniz:
ASYNCHRONOUS
- Eşzamansız mod, dizine ekleme-sunuma gecikmesinin artmasını ve dizine ekleme istekleri için büyük işleme hızı kotasını karşılar. Deponun tamamının ilk dizine eklenmesi (dolgu) işlemi için eşzamansız modun kullanılması önerilir.
SYNCHRONOUS
- Eşzamanlı mod, dizine ekleme-sunum gecikme süresinin daha kısa olmasını sağlar ve sınırlı işleme hızı kotasına uyum sağlar. Depoda yapılan güncellemelerin ve değişikliklerin dizine eklenmesi için eşzamanlı mod önerilir. Belirtilmezse istek modu varsayılan olarak
SYNCHRONOUS
değerine ayarlanır.
Alt kimlikleri Cloud Search dizine ekleme sırasına yerleştirin
Aşağıdaki kod snippet'i, şu anda işlenmekte olan üst öğe için alt kimlikleri, işleme sırasına nasıl dahil edeceğinizi gösterir. Bu kimlikler, üst öğe dizine eklendikten sonra işlenir.
Sonraki Adımlar
Atabileceğiniz adımlardan bazıları şunlardır:
- (İsteğe bağlı) Kapatmadan önce tüm kaynakları serbest bırakmak için
close()
yöntemini uygulayın. - (isteğe bağlı) Identity Connector SDK'sını kullanarak bir kimlik bağlayıcı oluşturun.
REST API'yi kullanarak içerik bağlayıcı oluşturma
Aşağıdaki bölümlerde REST API kullanılarak içerik bağlayıcının nasıl oluşturulacağı açıklanmaktadır.
Geçiş stratejinizi belirleme
İçerik bağlayıcının birincil işlevi, bir depodan veri aktarmak ve verilerini dizine eklemektir. Deponuzdaki verilerin boyutuna ve düzenine bağlı olarak bir geçiş stratejisi uygulamanız gerekir. Yaygın olarak kullanılan üç geçiş stratejisi şunlardır:
- Tam geçiş stratejisi
Tam geçiş stratejisi, deponun tamamını tarar ve her öğeyi kör olarak dizine ekler. Bu strateji genellikle küçük bir deponuz olduğunda kullanılır ve her dizine ekleme işleminizde tam geçiş yapmanın ek yüküne neden olabilir.
Bu geçiş stratejisi, çoğunlukla hiyerarşik olmayan, statik verileri olan küçük depolar için uygundur. Bu geçiş stratejisini, değişiklik algılaması zor olduğunda veya depo tarafından desteklenmediğinde de kullanabilirsiniz.
- Geçiş stratejisi listeleme
Liste geçiş stratejisi, tüm alt düğümler dahil olmak üzere deponun tamamını tarayıp her öğenin durumunu belirler. Ardından, bağlayıcı ikinci bir geçiş yapar ve yalnızca son dizine ekleme işleminden bu yana yeni veya güncellenmiş öğeleri dizine ekler. Bu strateji genellikle mevcut bir dizinde ek güncellemeler yapmak için kullanılır (dizini her güncellediğinizde tam bir geçiş yapmak yerine).
Bu geçiş stratejisi, değişiklik algılaması zor olduğunda veya veri havuzu tarafından desteklenmediğinde, hiyerarşik olmayan verileriniz olduğunda ve çok büyük veri kümeleriyle çalıştığınızda uygundur.
- Grafik geçişi
Grafik geçiş stratejisi, her bir öğenin durumunu belirlemek için üst düğümün tamamını tarar. Ardından, bağlayıcı ikinci bir geçiş yapar ve yalnızca kök düğümdeki öğeler yenidir veya son dizine ekleme işleminden sonra güncellenir. Son olarak bağlayıcı, tüm alt kimlikleri iletir. Ardından yeni veya güncellenmiş alt düğümlerdeki öğeleri dizine ekler. Bağlayıcı, tüm öğeler ele alınana kadar tüm alt düğümlerde yinelemeli olarak devam eder. Bu geçiş, genellikle tüm kimliklerin listelenmesinin pratik olmadığı hiyerarşik depolar için kullanılır.
Seri dizinleri veya web sayfaları gibi taranması gereken hiyerarşik verileriniz varsa bu strateji uygundur.
Geçiş stratejinizi ve dizin öğelerinizi uygulama
Cloud Search için dizine eklenebilir her öğe, Cloud Search API'de öğe olarak adlandırılır. Öğe dosya, klasör, CSV dosyasındaki bir satır veya veritabanı kaydı olabilir.
Şemanız kaydedildikten sonra, dizini aşağıdaki şekilde doldurabilirsiniz:
(isteğe bağlı) Dizine ekleme için 100 KiB'den büyük dosyaları yüklemek üzere
items.upload
özelliğini kullanma. Daha küçük dosyalar içinitems.index
kullanarak içeriği inlineContent olarak yerleştirin.(İsteğe bağlı) Dizine eklemek üzere medya dosyaları yüklemek için
media.upload
özelliğini kullanma.Öğeyi dizine eklemek için
items.index
özelliğini kullanma. Örneğin, şemanız film şemasında nesne tanımını kullanıyorsa tek bir öğe için dizine ekleme isteği aşağıdaki gibi görünür:{ "name": "datasource/<data_source_id>/items/titanic", "acl": { "readers": [ { "gsuitePrincipal": { "gsuiteDomain": true } } ] }, "metadata": { "title": "Titanic", "viewUrl": "http://www.imdb.com/title/tt2234155/?ref_=nv_sr_1", "objectType": "movie" }, "structuredData": { "object": { "properties": [ { "name": "movieTitle", "textValues": { "values": [ "Titanic" ] } }, { "name": "releaseDate", "dateValues": { "values": [ { "year": 1997, "month": 12, "day": 19 } ] } }, { "name": "actorName", "textValues": { "values": [ "Leonardo DiCaprio", "Kate Winslet", "Billy Zane" ] } }, { "name": "genre", "enumValues": { "values": [ "Drama", "Action" ] } }, { "name": "userRating", "integerValues": { "values": [ 8 ] } }, { "name": "mpaaRating", "textValues": { "values": [ "PG-13" ] } }, { "name": "duration", "textValues": { "values": [ "3 h 14 min" ] } } ] } }, "content": { "inlineContent": "A seventeen-year-old aristocrat falls in love with a kind but poor artist aboard the luxurious, ill-fated R.M.S. Titanic.", "contentFormat": "TEXT" }, "version": "01", "itemType": "CONTENT_ITEM" }
(İsteğe bağlı) Bir öğeyi doğrulamak için items.get çağrıları dizine eklendi.
Geçişin tam olarak yapılması için deponun tamamını düzenli olarak yeniden dizine eklersiniz. Bir liste veya grafik geçişi gerçekleştirmek için depo deposu değişikliklerini işlemek üzere kodu uygulamanız gerekir.
Depo değişikliklerini işleme
Tam dizine ekleme yapmak için bir depodan her öğeyi düzenli olarak toplayabilir ve dizine ekleyebilirsiniz. Dizininizin güncel olmasını sağlamada etkili olsa da daha büyük veya hiyerarşik veri havuzlarıyla çalışırken tam dizine ekleme maliyetli olabilir.
Bir deponun tamamını sık sık dizine eklemek için dizin çağrıları kullanmak yerine, değişiklikleri izleyen ve yalnızca değişen öğeleri dizine ekleyen bir mekanizma olarak Google Cloud Dizine Ekleme Sırası'nı da kullanabilirsiniz. Daha sonra yoklama ve güncelleme için öğeleri sıraya almak üzere items.push isteklerini kullanabilirsiniz. Google Cloud Dizine Ekleme Sırası hakkında daha fazla bilgi edinmek için Google Cloud Dizine Ekleme Sırası'na bakın.
Google Cloud Search API hakkında daha fazla bilgi için Cloud Search API'ye bakın.