Şema oluşturma ve kaydetme

Google Cloud Search şeması, verilerinizi dizine ekleme ve sorgulama işlemlerinde kullanılacak nesneleri, özellikleri ve seçenekleri tanımlayan bir JSON yapısıdır. İçerik bağlayıcınız, veri havuzunuzdaki verileri okur ve kayıtlı şemanıza göre verileri yapılandırır ve dizine ekler.

API'ye bir JSON şema nesnesi sağlayıp bunu kaydederek şema oluşturabilirsiniz. Verilerinizi dizine ekleyebilmeniz için depolarınızın her biri için bir şema nesnesi kaydetmeniz gerekir.

Bu dokümanda, şema oluşturmayla ilgili temel bilgiler verilmektedir. Arama deneyimini iyileştirmek için şemanızı nasıl ayarlayacağınız hakkında bilgi edinmek için Arama kalitesini iyileştirme başlıklı makaleyi inceleyin.

Şema oluşturun

Cloud Search şemanızı oluşturmak için kullanılan adımların listesi aşağıda verilmiştir:

  1. Beklenen kullanıcı davranışını belirleme
  2. Veri kaynağını başlatma
  3. Şema oluşturma
  4. Tam örnek şema
  5. Şemanızı kaydetme
  6. Verilerinizi dizine ekleme
  7. Şemanızı test etme
  8. Şemanızı ayarlama
bölümüne bakın.

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

Kullanıcılarınızın göndereceği sorgu türlerini tahmin etmek, şemanızı oluşturma stratejinizi yönlendirmenize yardımcı olur.

Örneğin, bir film veritabanına sorgu gönderirken kullanıcının "Robert Redford'un oynadığı tüm filmleri göster" gibi bir sorgu göndermesini bekleyebilirsiniz. Bu nedenle şemanız, "belirli bir aktöre sahip tüm filmler"e dayalı sorgu sonuçlarını desteklemelidir.

Şemanızı, kullanıcılarınızın davranış kalıplarını yansıtacak şekilde tanımlamak için aşağıdaki görevleri gerçekleştirebilirsiniz:

  1. Farklı kullanıcılardan gelen çeşitli istenen sorguları değerlendirin.
  2. Sorgularda kullanılabilecek nesneleri tanımlayın. Nesneler, film veritabanındaki bir film gibi ilgili verilerin mantıksal kümeleridir.
  3. Nesneyi oluşturan ve sorgularda kullanılabilecek özellikleri ve değerleri tanımlayın. Özellikler, nesnenin dizine eklenebilir özellikleridir. Basit değerler veya başka nesneler içerebilirler. Örneğin, bir film nesnesi, ilkel değerler olarak filmin başlığı ve yayın tarihi gibi özelliklere sahip olabilir. Film nesnesi, oyuncu kadrosu gibi kendi adları veya rolleri gibi özellikleri olan başka nesneler de içerebilir.
  4. Tesisler için geçerli örnek değerleri tanımlayın. Değerler, bir mülk için dizine eklenen gerçek verilerdir. Örneğin, veritabanınızdaki bir filmin adı "Kayıp Arkayı Çalanlar" olabilir.
  5. Kullanıcılarınızın istediği sıralama ve derecelendirme seçeneklerini belirleyin. Örneğin, kullanıcılar filmleri sorgularken kronolojik olarak sıralamak ve kitle puanına göre sıralamak isteyebilir. Bu durumda, başlığa göre alfabetik olarak sıralama yapmaları gerekmez.
  6. (isteğe bağlı) Mülklerinizden birinin, aramaların yapılabileceği daha spesifik bir bağlamı (ör. kullanıcıların iş rolü veya departmanı) temsil edip etmediğini düşünün. Böylece, otomatik tamamlama önerileri bağlama göre sağlanabilir. Örneğin, film veritabanı arayan kullanıcılar yalnızca belirli bir film türüyle ilgileniyor olabilir. Kullanıcılar, aramalarının hangi türü döndürmesini istediklerini tanımlar (muhtemelen kullanıcı profillerinin bir parçası olarak). Ardından, kullanıcı filmlerle ilgili bir sorgu yazmaya başladığında, otomatik tamamlama önerileri kapsamında yalnızca tercih ettiği türdeki filmler ("aksiyon filmleri" gibi) önerilir.
  7. Aramalarda kullanılabilecek bu nesnelerin, özelliklerin ve örnek değerlerin listesini oluşturun. (Bu listenin nasıl kullanıldığıyla ilgili ayrıntılar için Operatör seçeneklerini tanımlama bölümüne bakın.)

Veri kaynağınızı başlatma

Veri kaynağı, dizine eklenen ve Google Cloud'da depolanan bir veri havuzundaki verileri temsil eder. Veri kaynağını başlatmayla ilgili talimatlar için Üçüncü taraf veri kaynaklarını yönetme başlıklı makaleyi inceleyin.

Kullanıcının arama sonuçları veri kaynağından döndürülür. Bir kullanıcı bir arama sonucunu tıkladığında Cloud Search, dizine ekleme isteğinde sağlanan URL'yi kullanarak kullanıcıyı gerçek öğeye yönlendirir.

Nesnelerinizi tanımlama

Şemadaki temel veri birimi, verilerin mantıksal yapısı olan "şema nesnesi" olarak da adlandırılan nesnedir. Film veritabanında, verilerin mantıksal yapılarından biri "film"dir. Filmde yer alan oyuncuları ve ekibi temsil etmek için "kişi" de bir nesne olabilir.

Bir şemada her nesnenin, nesneyi tanımlayan bir dizi özelliği veya özelliği vardır (ör. bir filmin adı ve süresi ya da bir kişinin adı ve doğum tarihi). Bir nesnenin özellikleri, ilkel değerler veya başka nesneler içerebilir.

Şekil 1'de film ve kişi nesneleri ile ilişkili mülkler gösterilmektedir.

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

Cloud Search şeması, temel olarak objectDefinitions etiketinde tanımlanan nesne tanımı beyanlarının bir listesidir. Aşağıdaki şema snippet'inde, film ve kişi şema nesneleri için objectDefinitions ifadeleri gösterilmektedir.

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

Bir şema nesnesini tanımlarken, nesne için şemadaki diğer tüm nesneler arasında benzersiz olması gereken bir name sağlarsınız. Genellikle, nesneyi tanımlayan bir name değeri kullanırsınız (ör. film nesnesi için movie). Şema hizmeti, dizine eklenebilir nesneler için name alanını anahtar tanımlayıcı olarak kullanır. name alanı hakkında daha fazla bilgi için Nesne Tanımı'na bakın.

Nesne özelliklerini tanımlama

ObjectDefinition referansında belirtildiği gibi, nesne adının ardından bir options grubu ve propertyDefinitions listesi gelir. options, freshnessOptions ve displayOptions'ten de oluşabilir. freshnessOptions, arama sıralamasını bir öğenin güncelliğine göre ayarlamak için kullanılır. displayOptions, belirli etiket ve özelliklerin bir nesnenin arama sonuçlarında gösterilip gösterilmeyeceğini tanımlamak için kullanılır.

propertyDefinitions bölümünde, bir nesnenin özelliklerini (ör. film başlığı ve yayın tarihi) tanımlarsınız.

Aşağıdaki snippet'te, movieTitle ve releaseDate olmak üzere iki özelliği olan movie nesnesi gösterilmektedir.

{
  "objectDefinitions": [
    {
      "name": "movie",
      "propertyDefinitions": [
        {
          "name": "movieTitle",
          "isReturnable": true,
          "isWildcardSearchable": 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"
            }
          },
          "displayOptions": {
            "displayLabel": "Release date"
          }
      ...
      ]
    }
  ]
}

PropertyDefinition aşağıdaki öğelerden oluşur:

  • bir name dizesi.
  • Önceki snippet'teki isReturnable gibi türden bağımsız seçeneklerin listesi.
  • Bir tür ve türle ilişkili türe özgü seçenekler (Önceki snippet'teki textPropertyOptions ve retrievalImportance gibi).
  • Tesisin arama operatörü olarak nasıl kullanıldığını açıklayan bir operatorOptions.
  • Bir veya daha fazla displayOptions (Önceki snippet'teki displayLabel gibi).

Bir mülkün name, kapsayıcı nesne içinde benzersiz olmalıdır ancak aynı ad diğer nesnelerde ve alt nesnelerde kullanılabilir. Şekil 1'de, filmin başlığı ve gösterim tarihi iki kez tanımlanmıştır: bir kez movie nesnesinde ve bir kez de person nesnesinin filmography alt nesnesinde. Bu şema, movieTitle alanını yeniden kullanarak iki tür arama davranışını destekleyebilir:

  • Kullanıcılar bir filmin adını aradığında film sonuçlarını gösterin.
  • Kullanıcılar bir oyuncunun oynadığı filmin başlığını aradığında kişi sonuçlarını gösterin.

Benzer şekilde şema, iki movieTitle alanı için aynı anlama sahip olduğu için releaseDate alanını yeniden kullanır.

Kendi şemanızı geliştirirken, veri havuzunuzda şemanızda birden fazla kez tanımlamak istediğiniz verileri içeren ilgili alanlar olabileceğini göz önünde bulundurun.

Türe duyarlı olmayan seçenekler ekleme

PropertyDefinition, veri türünden bağımsız olarak tüm mülklerde ortak olan genel arama işlevi seçeneklerini listeler.

  • isReturnable: Mülkün, Query API aracılığıyla arama sonuçlarında döndürülmesi gereken verileri tanımlayıp tanımlamadığını belirtir. Örnek film mülklerinin tümü iade edilebilir. İade edilemez mülkler, kullanıcıya iade edilmeden arama veya sıralama sonuçları için kullanılabilir.
  • isRepeatable: Özellik için birden fazla değere izin verilip verilmediğini belirtir. Örneğin, bir filmin yalnızca bir yayın tarihi vardır ancak birden fazla oyuncusu olabilir.
  • isSortable: Özelliğin sıralama için kullanılabileceğini belirtir. Bu, tekrarlanabilir mülkler için geçerli olamaz. Örneğin, film sonuçları yayın tarihine veya kitle puanına göre sıralanabilir.
  • isFacetable: Mülkün yönler oluşturmak için kullanılabileceğini belirtir. Özellik, arama sonuçlarını hassaslaştırmak için kullanılır. Kullanıcı ilk sonuçları görür ve ardından bu sonuçları daha da hassaslaştırmak için ölçütler veya özellikler ekler. Bu seçenek, türü nesne olan mülkler için doğru olamaz ve bu seçeneğin ayarlanması için isReturnable doğru olmalıdır. Son olarak, bu seçenek yalnızca enum, boole ve metin mülkleri için desteklenir. Örneğin, örnek şemamızda genre, actorName, userRating ve mpaaRating özelliklerini, arama sonuçlarının etkileşimli olarak hassaslaştırılması için kullanılabilecek şekilde tablolanabilir hale getirebiliriz.
  • isWildcardSearchable, kullanıcıların bu mülk için joker karakter araması yapabileceğini gösterir. Bu seçenek yalnızca metin mülklerinde kullanılabilir. Metin alanındaki joker karakter aramasının işleyiş şekli, exactMatchWithOperator alanında ayarlanan değere bağlıdır. exactMatchWithOperator, true olarak ayarlanırsa metin değeri tek bir atomik değer olarak jetonlara ayrılır ve bu değere karşı joker karakter araması yapılır. Örneğin, metin değeri science-fiction ise science-* joker karakter sorgusu ile eşleşir. exactMatchWithOperator, false olarak ayarlanırsa metin değeri jetonlara ayrılır ve her jeton için joker karakter araması yapılır. Örneğin, metin değeri "bilim kurgu" ise sci* veya fi* joker karakter sorguları öğeyle eşleşir ancak science-* eşleşmez.

Bu genel arama işlevi parametrelerinin tümü Boole değeridir. Tümünün varsayılan değeri false'tür ve kullanılabilmesi için true olarak ayarlanmalıdır.

Aşağıdaki tabloda, movie nesnesinin tüm özellikleri için true olarak ayarlanan boole parametreleri gösterilmektedir:

Mülk isReturnable isRepeatable isSortable isFacetable isWildcardSearchable
movieTitle true true
releaseDate true true
genre true true true
duration true
actorName true true true true
userRating true true
mpaaRating true true

Bir film birden fazla türe ait olabileceği ve genellikle birden fazla oyuncu içerebileceği için hem genre hem de actorName için isRepeatable değeri true olarak ayarlanmıştır. Tekrarlanabilir veya tekrarlanabilir bir alt nesnede yer alan mülkler sıralanabilir değildir.

Türü tanımlama

PropertyDefinition referans bölümünde, xx'ın boolean gibi belirli bir tür olduğu çeşitli xxPropertyOptions örnekleri listelenir. Mülkün veri türünü ayarlamak için uygun veri türü nesnesini tanımlamanız gerekir. Bir mülk için veri türü nesnesi tanımlamak, söz konusu mülkün veri türünü belirler. Örneğin, movieTitle mülkü için textPropertyOptions değerini tanımlamak, film başlığının metin türüne sahip olduğunu gösterir. Aşağıdaki snippet'te, veri türünü ayarlayan textPropertyOptions ile movieTitle mülkü gösterilmektedir.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    ...
  },
  ...
},

Bir mülkte yalnızca bir ilişkili veri türü olabilir. Örneğin, film şemamızda releaseDate yalnızca bir tarih (ör. 2016-01-13) veya bir dize olabilir (ör. January 13, 2016) ancak her ikisi birden yapılamaz.

Örnek film şemasında mülklerin veri türlerini belirtmek için kullanılan veri türü nesneleri şunlardır:

Mülk Veri türü nesnesi
movieTitle textPropertyOptions
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions
mpaaRating textPropertyOptions

Mülk için seçtiğiniz veri türü, beklenen kullanım alanlarınıza bağlıdır. Bu film şemasının hayali senaryosuna göre, kullanıcıların sonuçları kronolojik olarak sıralamak isteyeceği varsayılır. Bu nedenle releaseDate bir tarih nesnesi olur. Örneğin, yıllara göre Aralık ayındaki sürümleri Ocak ayındaki sürümlerle karşılaştırma gibi bir kullanım alanı varsa dize biçimi yararlı olabilir.

Türe özgü seçenekleri yapılandırma

PropertyDefinition referans bölümünde her türün seçeneklerine bağlantılar verilmiştir. enumPropertyOptions içindeki possibleValues listesi hariç, türe özgü seçeneklerin çoğu isteğe bağlıdır. Ayrıca orderedRanking seçeneği, değerleri birbirine göre sıralamanıza olanak tanır. Aşağıdaki snippet'te, veri türünü ayarlayan textPropertyOptions ve türe özgü retrievalImportance seçeneğiyle movieTitle mülkü gösterilmektedir.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    ...
  },
  ...
}

Örnek şemada kullanılan türe özel ek seçenekler aşağıda verilmiştir:

Mülk Tür Türe özgü seçenekler
movieTitle textPropertyOptions retrievalImportance
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions orderedRanking, maximumValue
mpaaRating textPropertyOptions

Operatör seçeneklerini tanımlama

Türe özgü seçeneklere ek olarak her türün bir dizi isteğe bağlı seçeneği vardır.operatorOptions Bu seçenekler, mülkün arama operatörü olarak nasıl kullanıldığını açıklar. Aşağıdaki snippet'te, veri türünü ayarlayan textPropertyOptions ve türe özgü retrievalImportance ve operatorOptions seçenekleri bulunan movieTitle mülkü gösterilmektedir.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
      "operatorName": "title"
    }
  },
  ...
}

Her operatorOptions öğesinin bir operatorName öğesi vardır (ör. movieTitle için title). Operatör adı, tesisin arama operatörüdür. Arama operatörü, kullanıcıların aramayı daraltırken kullanmasını beklediğiniz gerçek parametredir. Örneğin, filmleri başlıklarına göre aramak için kullanıcı title:movieName yazar. Burada movieName, filmin adıdır.

Operatör adlarının tesisin adıyla aynı olması gerekmez. Bunun yerine, kuruluşunuzdaki kullanıcıların en sık kullandığı kelimeleri yansıtan operatör adları kullanmalısınız. Örneğin, kullanıcılarınız bir film başlığı için "title" yerine "name" terimini tercih ediyorsa operatör adı "name" olarak ayarlanmalıdır.

Tüm mülkler aynı türde çözüldüğü sürece birden fazla mülk için aynı operatör adını kullanabilirsiniz. Bir sorgu sırasında paylaşılan bir operatör adı kullanıldığında, söz konusu operatör adını kullanan tüm mülkler alınır. Örneğin, film nesnesinin plotSummary ve plotSynopsis özelliklerinin olduğunu ve bu özelliklerin her birinin plot değerine sahip bir operatorName değerinin olduğunu varsayalım. Bu özelliklerin ikisi de metin (textPropertyOptions) olduğu sürece plot arama operatörünü kullanan tek bir sorgu her ikisini de getirir.

Sırlanabilir mülkler, operatorName'e ek olarak operatorOptions'da lessThanOperatorName ve greaterThanOperatorName alanları içerebilir. Kullanıcılar, gönderilen bir değerle yapılan karşılaştırmalara dayalı sorgular oluşturmak için bu seçenekleri kullanabilir.

Son olarak, textOperatorOptions, operatorOptions alanında bir exactMatchWithOperator alanına sahiptir. exactMatchWithOperator değerini true olarak ayarlarsanız sorgu dizesi, yalnızca metinde bulunmalı değil, özellik değerinin tamamıyla eşleşmelidir. Metin değeri, operatör aramalarında ve yöne göre eşleşmelerde tek bir atomik değer olarak kabul edilir.

Örneğin, Kitap veya Film nesnelerini tür özellikleriyle dizine ekleyebilirsiniz. Türlere örnek olarak "Bilim Kurgu", "Bilim" ve "Kurgu" verilebilir. exactMatchWithOperator false olarak ayarlandığında veya atlandığında, bir tür arandığında ya da "Bilim" veya "Kurgu" yönü seçildiğinde metin parçalara ayrıldığı ve "Bilim" ile "Kurgu" parçaları "Bilim Kurgu"da bulunduğu için "Bilim Kurgu" ile ilgili sonuçlar da döndürülür. exactMatchWithOperator true olduğunda metin tek bir jeton olarak değerlendirilir. Bu nedenle, "Bilim" veya "Kurgu", "Bilim Kurgu" ile eşleşmez.

(İsteğe bağlı) displayOptions bölümünü ekleyin

Her propertyDefinition bölümünün sonunda isteğe bağlı bir displayOptions bölümü bulunur. Bu bölümde bir displayLabel dizesi bulunur. displayLabel, tesis için önerilen, kullanıcı dostu bir metin etiketidir. Mülk, ObjectDisplayOptions kullanılarak görüntüleme için yapılandırılmışsa bu etiket mülkün önünde gösterilir. Mülk görüntüleme için yapılandırılmışsa ve displayLabel tanımlanmamışsa yalnızca mülk değeri gösterilir.

Aşağıdaki snippet'te, "Başlık" olarak ayarlanmış bir displayLabel ile movieTitle mülkü gösterilmektedir.

{
  "name": "movieTitle",
  "isReturnable": true,
  "isWildcardSearchable": true,
  "textPropertyOptions": {
    "retrievalImportance": { "importance": "HIGHEST" },
    "operatorOptions": {
       "operatorName": "title"
    }
},
  "displayOptions": {
    "displayLabel": "Title"
  }
},

Aşağıda, örnek şemada movie nesnesinin tüm özelliklerinin displayLabel değerleri verilmiştir:

Mülk displayLabel
movieTitle Title
releaseDate Release date
genre Genre
duration Run length
actorName Actor
userRating Audience score
mpaaRating MPAA rating

(İsteğe bağlı) suggestionFilteringOperators[] bölümü ekleme

Her propertyDefinition bölümünün sonunda isteğe bağlı bir suggestionFilteringOperators[] bölümü bulunur. Otomatik tamamlama önerilerini filtrelemek için kullanılan bir mülkü tanımlamak üzere bu bölümü kullanın. Örneğin, önerileri kullanıcının tercih ettiği film türüne göre filtrelemek için genre operatörünü tanımlayabilirsiniz. Ardından, kullanıcı arama sorgusunu yazdığında, otomatik tamamlama önerileri kapsamında yalnızca tercih ettiği türe uygun filmler gösterilir.

Şemanızı kaydetme

Cloud Search sorgularından yapılandırılmış veri döndürülmesi için şemanızı Cloud Search şema hizmetine kaydetmeniz gerekir. Bir şemayı kaydettirmek için Veri kaynağını başlatma adımında aldığınız veri kaynağı kimliği gerekir.

Veri kaynağı kimliğini kullanarak şemanızı kaydetmek için bir UpdateSchema isteği gönderin.

UpdateSchema referans sayfasında ayrıntılı olarak açıklandığı gibi, şemanızı kaydettirmek için aşağıdaki HTTP isteğini gönderin:

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

İsteğinizin metni aşağıdakileri içermelidir:

{
  "validateOnly": // true or false,
  "schema": {
    // ... Your complete schema object ...
  }
}

Şemanızı gerçekten kaydetmeden geçerliliğini test etmek için validateOnly seçeneğini kullanın.

Verilerinizi dizine ekleme

Şemanız kaydedildikten sonra dizin çağrılarını kullanarak veri kaynağını doldurun. Dizine ekleme işlemi genellikle içerik bağlayıcınızda yapılır.

Film şeması kullanılarak tek bir film için REST API dizine ekleme isteği şu şekilde görünür:

{
  "name": "datasource/<data_source_id>/items/titanic",
  "acl": {
    "readers": [
      {
        "gsuitePrincipal": {
          "gsuiteDomain": true
        }
      }
    ]
  },
  "metadata": {
    "title": "Titanic",
    "sourceRepositoryUrl": "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"
}

objectType alanındaki movie değerinin, şemada nesne tanımı adıyla nasıl eşleştiğini unutmayın. Cloud Search, bu iki değeri eşleştirerek dizine ekleme sırasında hangi şema nesnesini kullanacağını bilir.

Ayrıca, releaseDate şeması mülkünün dizine eklenmesi sırasında datePropertyOptions kullanılarak date veri türü olarak tanımlandığı için year, month ve day alt mülklerinin nasıl kullanıldığını da unutmayın. Ancak year, month ve day şemada tanımlanmadığından bu özelliklerden biriyle (ör. year) ayrı ayrı yüklemeniz gerekir.

Ayrıca, yinelenebilir actorName özelliğinin bir değer listesi kullanılarak nasıl dizine eklendiğini de unutmayın.

Olası dizine ekleme sorunlarını belirleme

Şemalar ve dizine eklemeyle ilgili en yaygın iki sorun şunlardır:

  • Dizine ekleme isteğiniz, şema hizmetine kaydedilmemiş bir şema nesnesi veya mülk adı içeriyor. Bu sorun, mülkün veya nesnenin yoksayılmasına neden olur.

  • Dizine ekleme isteğinizde, şemaya kaydedilen türden farklı bir tür değeri olan bir mülk var. Bu sorun, Cloud Search'in dizine ekleme sırasında hata döndürmesine neden olur.

Şemanızı çeşitli sorgu türleriyle test etme

Şemanızı büyük bir üretim veri deposuna kaydettirmeden önce daha küçük bir test veri deposuyla test etmeyi düşünebilirsiniz. Daha küçük bir test deposuyla test yapmak, daha büyük bir dizini veya mevcut bir üretim dizini etkilemeden şemanızda hızlıca ayarlamalar yapmanıza ve dizine eklenen verileri silmenize olanak tanır. Test verileri deposu için, diğer kullanıcıların Arama sonuçlarında bu verileri görmemesi amacıyla yalnızca bir test kullanıcısına yetki veren bir ACL oluşturun.

Arama sorgularını doğrulamak için bir arama arayüzü oluşturmak istiyorsanız Arama arayüzü başlıklı makaleyi inceleyin.

Bu bölümde, film şemasını test etmek için kullanabileceğiniz birkaç farklı örnek sorgu bulunmaktadır.

Genel bir sorgu ile test etme

Genel sorgu, veri kaynağındaki belirli bir dize içeren tüm öğeleri döndürür. Arama arayüzünü kullanarak "titanic" kelimesini yazıp Return tuşuna basarak bir film veri kaynağına karşı genel sorgu çalıştırabilirsiniz. "Titanik" kelimesini içeren tüm filmler arama sonuçlarında döndürülmelidir.

Operatörle test etme

Sorguya operatör eklemek, sonuçları bu operatör değeriyle eşleşen öğelerle sınırlandırır. Örneğin, belirli bir aktörle oynadığı tüm filmleri bulmak için actor operatörünü kullanabilirsiniz. Arama arayüzünü kullanarak bu operatör sorgusunu gerçekleştirmek için "oyuncu:Zane" gibi bir operatör=değer çifti yazıp Return tuşuna basmanız yeterlidir. Oyuncu olarak Zane'in yer aldığı tüm filmler arama sonuçlarında döndürülmelidir.

Şemanızı ayarlama

Şemanız ve verileriniz kullanıma sunulduktan sonra, kullanıcılarınız için hangi özelliklerin çalışıp hangilerinin çalışmadığını izlemeye devam edin. Şemanızı aşağıdaki durumlar için ayarlamanız önerilir:

  • Daha önce dizine eklenmemiş bir alanın dizine eklenmesi. Örneğin, kullanıcılarınız yönetmenin adına göre filmleri tekrar tekrar arayabilir. Bu nedenle, şemanızı yönetmenin adını operatör olarak destekleyecek şekilde ayarlayabilirsiniz.
  • Arama operatörü adlarının kullanıcı geri bildirimlerine göre değiştirilmesi. Operatör adlarının kullanıcı dostu olması gerekir. Kullanıcılarınız sürekli olarak yanlış operatör adını "hatırlıyorsa" operatör adını değiştirmeyi düşünebilirsiniz.

Şema değişikliğinden sonra yeniden dizine ekleme

Şemanızdaki aşağıdaki değerlerden herhangi birini değiştirmek için verilerinizi yeniden dizine eklemeniz gerekmez. Yeni bir UpdateSchema isteği göndermeniz yeterlidir. Böylece dizininiz çalışmaya devam eder:

  • Operatör adları.
  • Tam sayı minimum ve maksimum değerleri.
  • Tam sayı ve enum sıralı sıralama.
  • Güncel olma seçenekleri.
  • Görüntüleme seçenekleri.

Aşağıdaki değişiklikler için daha önce dizine eklenen veriler, daha önce kaydedilen şemaya göre çalışmaya devam eder. Ancak, aşağıdaki değişiklikleri içeren güncellenmiş şemaya göre değişiklikleri görmek için mevcut girişleri yeniden dizine eklemeniz gerekir:

  • Yeni bir mülk veya nesne ekleme ya da kaldırma
  • isReturnable, isFacetable veya isSortable için false değerini true olarak değiştirme

Net bir kullanım alanınız ve ihtiyacınız varsa isFacetable veya isSortabletrue olarak yalnızca ayarlamanız gerekir.

Son olarak, bir mülkü isSuggestable olarak işaretleyerek şemanızı güncellediğinizde verilerinizi yeniden dizine eklemeniz gerekir. Bu da söz konusu mülk için otomatik tamamlama özelliğinin kullanımında gecikmeye neden olur.

İzin verilmeyen mülk değişiklikleri

Verilerinizi yeniden dizine ekleseniz bile bazı şema değişikliklerine izin verilmez. Bu değişiklikler dizini bozar veya kötü ya da tutarsız arama sonuçları verir. Bu değişiklikler şunlardır:

  • Tesis veri türü.
  • Tesis adı.
  • exactMatchWithOperator ayarını etkinleştirin.
  • retrievalImportance ayarını etkinleştirin.

Ancak bu sınırlamayı aşmanın bir yolu vardır.

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

Cloud Search, depo dizine eklendikten sonra kötü arama sonuçları veya bozuk bir arama dizini oluşturacak değişiklikleri önlemek için UpdateSchema isteklerinde belirli türde değişiklikleri engeller. Örneğin, bir özelliğin veri türü veya adı ayarlandıktan sonra değiştirilemez. Verilerinizi yeniden dizine ekleseniz bile bu değişiklikler basit bir UpdateSchema isteğiyle yapılamaz.

Şemanızda aksi takdirde izin verilmeyen bir değişiklik yapmanız gerektiğinde genellikle aynı etkiyi sağlayan bir dizi izin verilen değişiklik yapabilirsiniz. Genel olarak bu işlem, önce dizine eklenen mülkleri eski bir nesne tanımından yeni bir tanıma taşımayı ve ardından yalnızca yeni mülkü kullanan bir dizine ekleme isteği göndermeyi içerir.

Aşağıdaki adımlarda, bir mülkün veri türünü veya adını nasıl değiştireceğiniz gösterilmektedir:

  1. Şemanızdaki nesne tanımına yeni bir özellik ekleyin. Değiştirmek istediğiniz tesisten farklı bir ad kullanın.
  2. Yeni tanımı içeren UpdateSchema isteğini gönderin. İstekte hem yeni hem de eski mülk dahil olmak üzere şemanın tamamını göndermeyi unutmayın.
  3. Dizini veri deposundan doldurun. Dizini doldurmak için tüm dizine ekleme isteklerini yeni mülkü kullanarak gönderin. Sorgu eşleşmelerinin iki kez sayılmasına neden olacağından eski mülkü kullanmayın.

    1. Dizine ekleme işlemi sırasında yeni mülkü kontrol edin ve tutarsız davranışı önlemek için varsayılan olarak eski mülkü kullanın.
    2. Doldurma işlemi tamamlandıktan sonra doğrulamak için test sorguları çalıştırın.
  4. Eski mülkü silin. Eski mülk adı olmadan başka bir UpdateSchema isteği gönderin ve gelecekteki dizine ekleme isteklerinde eski mülk adını kullanmayı bırakın.

  5. Eski mülkün tüm kullanımlarını yeni mülke taşıyın. Örneğin, mülk adını içerik üreticiden yazar olarak değiştirirseniz sorgu kodunuzu, daha önce içerik üreticiye referans verdiği yerde yazarı kullanacak şekilde güncellemeniz gerekir.

Cloud Search, beklenmedik dizine ekleme sonuçlarına neden olabilecek yeniden kullanımlara karşı koruma sağlamak için silinen tüm mülkleri veya nesneleri 30 gün boyunca saklar. Bu 30 gün içinde, silinen nesnenin veya mülkün tüm kullanımlarını taşımanız (gelecekteki dizin isteklerinden hariç tutmak da dahil) gerekir. Bu sayede, daha sonra bu mülkü veya nesneyi yeniden etkinleştirmeye karar verirseniz bunu dizininizin doğruluğunu koruyacak şekilde yapabilirsiniz.

Boyut sınırlamaları hakkında bilgi edinme

Cloud Search, yapılandırılmış veri nesnelerinin ve şemalarının boyutu konusunda sınırlar uygular. Bu sınırlar şunlardır:

  • Üst düzey nesnelerin maksimum sayısı 10'dur.
  • Yapılandırılmış veri hiyerarşisinin maksimum derinliği 10 seviyedir.
  • Bir nesnenin toplam alan sayısı 1.000 ile sınırlıdır. Bu sayıya ilkel alanların sayısı ve her iç içe yerleştirilmiş nesnenin alan sayısının toplamı dahildir.

Sonraki Adımlar

Aşağıda, uygulayabileceğiniz birkaç adım verilmiştir:

  1. Şemanızı test etmek için bir arama arayüzü oluşturun.

  2. Arama kalitesini iyileştirmek için şemanızı ayarlayın.

  3. Optimum sorgu yorumlaması için bir şema oluşturun.

  4. Şirketinizde yaygın olarak kullanılan terimlerin eş anlamlılarını tanımlamak için _dictionaryEntry şemasından nasıl yararlanacağınızı öğrenin. _dictionaryEntry şemasını kullanmak için Eş anlamlı kelimeleri tanımlama başlıklı makaleyi inceleyin.

  5. Bağlayıcı oluşturun.