Şema oluşturma ve kaydetme

Google Cloud Search şeması, nesneleri, özellikleri ve verilerin dizine eklenmesi ve sorgulanmasıyla ilgili seçenekleri tanımlayan bir JSON yapısıdır. İçerik bağlayıcınız, depo verilerini yapılandırmak ve dizine eklemek için kayıtlı şemayı kullanır.

API'ye bir JSON şema nesnesi sağlayarak şema oluşturursunuz. Verileri dizine eklemeden önce her depo için bir şema kaydetmeniz gerekir.

Bu belgede, şema oluşturmayla ilgili temel bilgiler verilmektedir. Arama deneyimini optimize etmek için Arama kalitesini artırma başlıklı makaleyi inceleyin.

Şema oluşturun

Cloud Search şemanızı oluşturmak için aşağıdaki adımları uygulayın:

  1. Beklenen kullanıcı davranışını belirleme
  2. Veri kaynağını başlatma
  3. Nesnelerinizi tanımlama
  4. Nesne özelliklerini tanımlama
  5. Şemanızı kaydetme
  6. Verilerinizi dizine ekleme
  7. Şemanızı test etme
  8. Şemanızı ayarlama

Beklenen kullanıcı davranışını belirleme

Kullanıcıların nasıl arama yapacağını tahmin etmek, şema stratejinizi tanımlamanıza yardımcı olur. Bir film veritabanında kullanıcılar "Robert Redford'ın oynadığı filmler" şeklinde arama yapabilir. Şemanız, belirli bir aktörün yer aldığı filmlerle ilgili sorguları desteklemelidir.

Şemanızı kullanıcı davranışıyla uyumlu hale getirmek için:

  1. Farklı kullanıcılardan gelen çeşitli sorguları değerlendirin.
  2. "Film" gibi mantıksal veri kümelerini veya nesneleri tanımlayın.
  3. Başlık veya yayın tarihi gibi özellikleri (nitelikler) belirleyin.
  4. "Kutsal Hazine Avcıları" gibi özellikler için geçerli değerleri belirleyin.
  5. Kronolojik sıra veya kitle derecelendirmeleri gibi sıralama ve derecelendirme ihtiyaçlarını belirleyin.
  6. Otomatik tamamlama önerilerini iyileştirmek için iş rolü gibi bağlam özelliklerini belirleyin.
  7. Bu nesneleri, özellikleri ve örnek değerleri listeleyin. Bu listeyi kullanarak operatör seçeneklerini tanımlayabilirsiniz.

Veri kaynağınızı başlatma

Veri kaynağı, Google Cloud'da depolanan dizine eklenmiş depo verilerini ifade eder. Üçüncü taraf veri kaynaklarını yönetme başlıklı makaleyi inceleyin. Bir kullanıcı sonucu tıkladığında Cloud Search, dizine ekleme isteğindeki URL'yi kullanarak kullanıcıyı öğeye yönlendirir.

Nesnelerinizi tanımlama

Nesne, şemanın temel birimidir. "Film" veya "kişi" gibi mantıksal yapılar nesnedir. Her nesnenin başlık, süre veya ad gibi özellikleri vardır.

Varlıklar arasındaki şema bağlantılarının çizimi
Şekil 1. İki nesne ve bir alt nesne içeren örnek şema.

Şema, objectDefinitions etiketindeki nesne tanımlarının listesidir.

{
  "objectDefinitions": [
    { "name": "movie" },
    { "name": "person" }
  ]
}

Her nesne için benzersiz adlar kullanın (ör. movie). Şema hizmeti bu adları anahtar olarak kullanır. ObjectDefinition konusuna bakın.

Nesne özelliklerini tanımlama

Başlık ve yayın tarihi gibi özellikleri propertyDefinitions bölümünde tanımlayın. options freshnessOptions (sıralama) ve displayOptions (kullanıcı arayüzü etiketleri) için kullanın.

{
  "objectDefinitions": [{
    "name": "movie",
    "propertyDefinitions": [
      {
        "name": "movieTitle",
        "isReturnable": true,
        "textPropertyOptions": {
          "retrievalImportance": { "importance": "HIGHEST" },
          "operatorOptions": { "operatorName": "title" }
        },
        "displayOptions": { "displayLabel": "Title" }
      },
      {
        "name": "releaseDate",
        "isReturnable": true,
        "isSortable": true,
        "datePropertyOptions": {
          "operatorOptions": {
            "operatorName": "released",
            "lessThanOperatorName": "releasedbefore",
            "greaterThanOperatorName": "releasedafter"
          }
        }
      }
    ]
  }]
}

Bir PropertyDefinition şunları içerir:

  • name dizesi.
  • Türden bağımsız seçenekler (ör. isReturnable).
  • Bir tür ve türe özgü seçenekler (ör. textPropertyOptions).
  • operatorOptions arama operatörleri için.
  • displayOptions kullanıcı arayüzü etiketleri için.

Farklı nesnelerde özellik adlarını yeniden kullanabilirsiniz. Örneğin, movieTitle hem movie nesnesinde hem de person nesnesinin filmografisinde görünebilir.

Türden bağımsız seçenekler ekleme

PropertyDefinition, türünden bağımsız olarak bir mülkte arama işlevini yapılandırmak için boole seçenekleri içerir. Bu seçenekler varsayılan olarak false şeklindedir ve kullanılabilmeleri için true olarak ayarlanmaları gerekir.

  • isReturnable: Mülk verileri Query API kullanılarak arama sonuçlarında döndürülmelidirse true olarak ayarlayın. İade edilemeyen özellikler, sonuçlarda görünmeden arama veya sıralama için kullanılabilir.
  • isRepeatable: Özellik birden fazla değere sahip olabiliyorsa true olarak ayarlayın. Örneğin, bir filmin tek bir yayın tarihi ancak birden fazla oyuncusu vardır.
  • isSortable: Özellik sıralama için kullanılabiliyorsa true olarak ayarlayın. isRepeatable, true ise veya özellik tekrarlanabilir bir alt nesnenin içindeyse true olamaz.
  • isFacetable: Özellik, yön oluşturmak (arama sonuçlarını daraltmak için kullanılan özellikler) için kullanılabiliyorsa true olarak ayarlayın.
    • isReturnable değerinin true olması gerekir.
    • Yalnızca enum, boolean ve metin özellikleri için desteklenir.
  • isWildcardSearchable: Kullanıcıların bu özellik üzerinde joker karakter aramaları yapmasına izin vermek için true olarak ayarlayın. Bu seçenek yalnızca metin özelliklerinde kullanılabilir ve davranışı exactMatchWithOperator ayarına bağlıdır:
    • exactMatchWithOperator, true ise: Metin değeri tek bir jeton olarak değerlendirilir. science-* gibi bir sorgu, science-fiction değeriyle eşleşir.
    • exactMatchWithOperator değeri false ise: Metin değeri jetonlaştırılır. sci* veya fi* gibi bir sorgu science-fiction ile eşleşir ancak science-* ile eşleşmez.

Tür tanımlama

Uygun özellik seçenekleri nesnesini (ör. textPropertyOptions). Olası tüm değerleri biliyorsanız enum'ları (enumPropertyOptions) kullanın. Bir mülk yalnızca bir veri türüne sahip olabilir.

Operatör seçeneklerini tanımlama

operatorOptions Bir özelliğin arama operatörü olarak nasıl çalıştığını açıklayın.

Her operatorOptions için bir operatorName gerekir (ör. title). Bu, kullanıcıların sorgulara yazdığı parametredir (ör. title:titanic). Sezgisel adlar kullanın ve bunları kullanıcılara gösterin.

Aynı türdeki mülkler arasında operatorName paylaşabilirsiniz. Bu adı kullanan sorgular, eşleşen tüm mülklerden sonuç alır.

Sıralanabilir özellikler, karşılaştırma sorguları için lessThanOperatorName ve greaterThanOperatorName özelliklerini içerebilir. Metin özellikleri, değerin tamamını tek bir jeton olarak değerlendirmek için exactMatchWithOperator kullanabilir.

Görüntüleme seçenekleri ekleme

İsteğe bağlı displayOptions bölümünde displayLabel bulunuyor. Bu, arama sonuçlarında gösterilen kullanıcı dostu bir etikettir.

Öneri filtreleme operatörleri ekleme

Otomatik tamamlama önerilerini filtreleyen bir özellik tanımlamak için suggestionFilteringOperators[] kullanın (ör. film önerilerini kullanıcının tercih ettiği türe göre filtreleme). Yalnızca bir öneri filtresi tanımlayabilirsiniz.

Şemanızı kaydetme

Veri kaynağı kimliğinizi kullanarak şemanızı şema hizmetine kaydedin. UpdateSchema isteği gönderin:

PUT https://cloudsearch.googleapis.com/v1/indexing/{name=datasources/*}/schema

Şemanızı kaydetmeden test etmek için validateOnly: true aracını kullanın.

Verilerinizi dizine ekleme

Kaydın ardından, genellikle bir bağlayıcı ile Index çağrılarını kullanarak veri kaynağını doldurun.

Örnek dizine ekleme isteği:

{
  "name": "datasource/<data_source_id>/items/titanic",
  "metadata": {
    "title": "Titanic",
    "objectType": "movie"
  },
  "structuredData": {
    "object": {
      "properties": [{
        "name": "movieTitle",
        "textValues": { "values": ["Titanic"] }
      }]
    }
  },
  "itemType": "CONTENT_ITEM"
}

Şemanızı test etme

Üretime geçmeden önce küçük bir depoyla test edin. Sonuçları bir test kullanıcısıyla sınırlayan bir ACL oluşturun.

  • Genel sorgu: Bir dizeyi arayın (ör. "titanic") yazarak eşleşen tüm öğeleri görebilirsiniz.
  • Operatör sorgusu: Bir operatör kullanın (ör. actor:Zane) kullanarak sonuçları sınırlandırabilirsiniz.

Şemanızı ayarlama

Kullanıcı geri bildirimlerini izleyin ve şemanızı buna göre ayarlayın. Yeni alanları dizine ekleyebilir veya operatörleri daha sezgisel olacak şekilde yeniden adlandırabilirsiniz.

Şema değişikliğinden sonra yeniden indeksleme

Aşağıdaki değişiklikler için yeniden indeksleme yapmanız gerekmez:

  • Operatör adları.
  • Sayısal sınırlar.
  • Sıralı sıralama.
  • Güncellik veya görüntüleme seçenekleri

Aşağıdakiler için yeniden indeksleme yapmanız gerekir:

  • Mülk veya nesne ekleme ya da kaldırma
  • isReturnable, isFacetable veya isSortable değerini true olarak değiştirme.
  • Bir mülkü isSuggestable olarak işaretleme

İzin verilmeyen mülk değişiklikleri

Dizini bozan veya tutarsız sonuçlara neden olan değişikliklere izin verilmez. Bu değişiklikler arasında şunlar yer alır:

  • Özellik veri türü veya adı.
  • exactMatchWithOperator veya retrievalImportance ayarları.

Karmaşık bir şema değişikliği yapma

İzin verilmeyen bir değişiklik yapmak için özellikleri eski bir tanımdan yeni bir tanıma taşıyın:

  1. Şemaya farklı bir ada sahip yeni bir özellik ekleyin.
  2. Şemayı hem yeni hem de eski özelliklerle kaydedin.
  3. Dizini yalnızca yeni özelliği kullanarak doldurun.
  4. Eski mülkü şemadan silin.
  5. Sorgu kodunuzu yeni mülk adını kullanacak şekilde güncelleyin.

Cloud Search, yeniden kullanımla ilgili sorunları önlemek için silinen öğeleri 30 gün boyunca kaydeder.

Boyut sınırlamaları

  • En fazla 10 üst düzey nesne.
  • Maksimum derinlik 10 seviyedir.
  • Nesne başına en fazla 1.000 alan (iç içe yerleştirilmiş alanlar dahil).

Sonraki Adımlar

  1. Arama arayüzü oluşturun.
  2. Arama kalitesini artırın.
  3. En iyi sorgu yorumu için bir şema oluşturun.
  4. Eş anlamlı kelimeleri tanımlayın.