Ş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, deponuzdaki verileri okur ve kayıtlı şemanıza göre verileri yapılandırıp indeksler.

API'ye bir JSON şema nesnesi sağlayıp ardından bunu kaydederek şema oluşturabilirsiniz. Verilerinizi dizine ekleyebilmeniz için her deponuz için bir şema nesnesi kaydetmeniz gerekir.

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

Şema oluşturun

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

  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
sayfasına bakın.

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

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

Örneğin, bir film veritabanına karşı sorgu yayınlarken kullanıcının "Robert Redford'un oynadığı tüm filmleri göster" gibi bir sorgu yapacağını tahmin edebilirsiniz. Bu nedenle şemanız, "belirli bir oyuncunun yer aldığı tüm filmler" sorgularına dayalı sonuçları desteklemelidir.

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

  1. Farklı kullanıcılardan gelen çeşitli sorguları değerlendirin.
  2. Sorgularda kullanılabilecek nesneleri belirleyin. Nesneler, ilgili verilerin mantıksal kümeleridir (ör. film veritabanındaki bir film).
  3. Nesneyi oluşturan ve sorgularda kullanılabilecek özellikleri ve değerleri belirleyin. Özellikler, nesnenin dizine eklenebilir özellikleridir. İlkel değerler veya diğer nesneler içerebilirler. Örneğin, bir film nesnesinin, filmin başlığı ve yayın tarihi gibi özellikleri temel değerler olarak olabilir. Film nesnesi, oyuncular gibi kendi özelliklerine (ör. ad veya rol) sahip başka nesneler de içerebilir.
  4. Özellikler için geçerli örnek değerleri belirleyin. Değerler, bir özellik için dizine eklenen gerçek verilerdir. Örneğin, veritabanınızdaki bir filmin başlığı "Kutsal Hazine Avcıları" 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 izleyici puanına göre derecelendirmek isteyebilir. Başlığa göre alfabetik olarak sıralamaları gerekmez.
  6. (İsteğe bağlı) Arama işlemlerinin yürütülebileceği daha spesifik bir bağlamı (ör. kullanıcıların iş rolü veya departmanı) temsil eden bir mülkünüz olup olmadığını değerlendirin. Böylece, bağlama göre otomatik tamamlama önerileri sunulabilir. Örneğin, film veritabanında arama yapan kullanıcılar yalnızca belirli bir film türüyle ilgileniyor olabilir. Kullanıcılar, aramalarının hangi türde sonuçlar döndürmesini istediklerini (ör. kullanıcı profillerinin bir parçası olarak) tanımlayabilir. Ardından, kullanıcı film sorgusu yazmaya başladığında yalnızca tercih ettiği türdeki filmler (ör. "aksiyon filmleri") otomatik tamamlama önerileri kapsamında önerilir.
  7. Bu nesnelerin, özelliklerin ve aramalarda kullanılabilecek örnek değerlerin bir 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 eklenmiş ve Google Cloud'da depolanmış bir veri deposundaki verileri ifade 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, kullanıcıyı dizine ekleme isteğinde sağlanan URL'yi kullanarak gerçek öğeye yönlendirir.

Nesnelerinizi tanımlayın

Şemadaki temel veri birimi, "şema nesnesi" olarak da adlandırılan nesnedir. Bu, verilerin mantıksal yapısıdır. Filmlerin bulunduğu bir veritabanında, verilerin mantıksal yapısı "film"dir. Başka bir nesne, filmde yer alan oyuncuları ve ekibi temsil etmek için "kişi" olabilir.

Şemadaki her nesnenin, nesneyi açıklayan bir dizi özelliği veya özelliği vardır. Örneğin, bir filmin başlığı ve süresi ya da bir kişinin adı ve doğum tarihi. Bir nesnenin özellikleri, temel değerleri veya diğer nesneleri içerebilir.

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

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

Cloud Search şeması, temelde objectDefinitions etiketi içinde tanımlanan nesne tanımı ifadelerinin 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 nesnesi tanımladığınızda, şemadaki diğer tüm nesneler arasında benzersiz olması gereken bir name sağlarsınız. Genellikle nesneyi açıklayan bir name değeri kullanırsınız. Örneğin, bir film nesnesi için movie değeri kullanılır. Şema hizmeti, dizine eklenebilir nesneler için anahtar tanımlayıcı olarak name alanını kullanır. name alanı hakkında daha fazla bilgi için Nesne Tanımı bölümüne bakın.

Nesne özelliklerini tanımlama

ObjectDefinition referansında belirtildiği gibi, nesne adından sonra bir dizi options ve bir propertyDefinitions listesi gelir. options, freshnessOptions ve displayOptions'dan da oluşabilir. freshnessOptions, arama sıralamasını bir öğenin güncelliğine göre ayarlamak için kullanılır. displayOptions, belirli etiketlerin 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, film adı ve yayın tarihi gibi bir nesnenin özelliklerini tanımlarsınız.

Aşağıdaki snippet'te movie nesnesi iki özellik ile gösterilmektedir: movieTitle ve releaseDate.

{
  "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:

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

Bir özelliğin name, kapsayan nesne içinde benzersiz olmalıdır ancak aynı ad diğer nesnelerde ve alt nesnelerde kullanılabilir. 1. şekilde, filmin başlığı ve yayın tarihi iki kez tanımlanmıştır: bir kez movie nesnesinde, 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 aktörün rol aldığı filmin adını aradığında kişi sonuçları gösterilir.

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

Kendi şemanızı geliştirirken, deponuzda şemanızda birden fazla kez bildirmek istediğiniz verileri içeren ilgili alanlar olup olmadığını göz önünde bulundurun.

Türden bağımsız 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ı gösterir. Örnek film özelliklerinin tümü döndürülebilir. Döndürülemeyen özellikler, kullanıcıya döndürülmeden sonuçları aramak veya sıralamak için kullanılabilir.
  • isRepeatable: Özellik için birden fazla değere izin verilip verilmediğini gösterir. Ö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 gösterir. Bu, tekrarlanabilen özellikler için geçerli değildir. Örneğin, film sonuçları yayın tarihine veya izleyici puanına göre sıralanabilir.
  • isFacetable: Özelliğin facet oluşturmak için kullanılabileceğini gösterir. Bir ö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 özellikler için doğru olamaz ve bu seçeneğin ayarlanması için isReturnable doğru olmalıdır. Son olarak, bu seçeneğin yalnızca enum, boolean ve metin özelliklerinde desteklendiğini hatırlatırız. Örneğin, örnek şemamızda genre, actorName, userRating ve mpaaRating özelliklerini, arama sonuçlarının etkileşimli olarak iyileştirilmesinde kullanılabilmeleri için yönlendirilebilir hale getirebiliriz.
  • isWildcardSearchable, kullanıcıların bu özellik için joker karakterli arama yapabileceğini gösterir. Bu seçenek yalnızca metin mülklerinde kullanılabilir. Metin alanında joker karakterli aramanın nasıl çalıştığı, exactMatchWithOperator alanında ayarlanan değere bağlıdır. exactMatchWithOperator, true olarak ayarlanırsa, metin değeri tek bir atomik değer olarak belirteçleştirilir ve buna karşı joker karakterli bir arama yapılır. Örneğin, metin değeri science-fiction ise science-* joker karakter sorgusu bu değerle eşleşir. exactMatchWithOperator, false olarak ayarlanırsa metin değeri jetonlaştırılır ve her jetona karşı joker karakterli arama gerçekleştirilir. Ö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'dır ve kullanılabilmesi için true olarak ayarlanması gerekir.

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 doğru doğru
releaseDate doğru doğru
genre doğru doğru doğru
duration doğru
actorName doğru doğru doğru doğru
userRating doğru doğru
mpaaRating doğru doğru

Bir film birden fazla türe ait olabileceği ve genellikle birden fazla oyuncu içerdiği için hem genre hem de actorName için isRepeatable, true olarak ayarlanmıştır. Tekrarlanabilir veya tekrarlanabilir bir alt nesnede yer alan bir özellik sıralanamaz.

Tür tanımlama

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

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

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

Örnek film şemasındaki özelliklerin 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 senaryosunda, kullanıcıların sonuçları kronolojik olarak sıralamak isteyeceği varsayılır. Bu nedenle releaseDate bir tarih nesnesidir. Örneğin, aralık sürümlerinin yıllar içinde ocak sürümleriyle karşılaştırılması gibi beklenen bir kullanım alanı varsa dize biçimi yararlı olabilir.

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

PropertyDefinition referans bölümünde her tür için seçeneklere 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 ile movieTitle özelliği ve retrievalImportance türüne özgü seçeneği gösterilmektedir.

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

Aşağıda, örnek şemada kullanılan türe özel ek seçenekler 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 özel seçeneklere ek olarak, her türün bir dizi isteğe bağlı seçeneği vardır.operatorOptions Bu seçenekler, özelliğin arama operatörü olarak nasıl kullanıldığını açıklar. Aşağıdaki snippet'te, veri türünü ayarlayan textPropertyOptions ile movieTitle özelliği ve retrievalImportance ile operatorOptions türe özgü seçenekler gösterilmektedir.

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

Her operatorOptions öğesinin bir operatorName'si vardır. Örneğin, movieTitle için title. Operatör adı, mülk için 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 yazmalıdır. 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ı kullanmanız gerekir. Örneğin, kullanıcılarınız bir film başlığı için "başlık" yerine "ad" terimini tercih ediyorsa operatör adı "ad" olarak ayarlanmalıdır.

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

Sıralanabilir özellikler, operatorName'ya ek olarak operatorOptions içinde lessThanOperatorName ve greaterThanOperatorName alanlarına sahip olabilir. Kullanıcılar, gönderilen bir değerle karşılaştırmaya dayalı sorgular oluşturmak için bu seçenekleri kullanabilir.

Son olarak, textOperatorOptions, operatorOptions içinde exactMatchWithOperator alanına sahiptir. exactMatchWithOperator değerini true olarak ayarlarsanız sorgu dizesi yalnızca metin içinde bulunmakla kalmayıp tüm özellik değeriyle eşleşmelidir. Metin değeri, operatör aramalarında ve yön eşleşmelerinde tek bir atomik değer olarak kabul edilir.

Örneğin, Kitap veya Film nesnelerini tür özellikleriyle dizine eklemeyi düşünebilirsiniz. Türler arasında "Bilim Kurgu", "Bilim" ve "Kurgu" yer alabilir. exactMatchWithOperator, false olarak ayarlandığında veya atlandığında, bir tür aramak ya da "Bilim" veya "Kurgu" yönünü seçmek de "Bilim Kurgu" sonuçlarını döndürür. Bunun nedeni, metnin jetonlaştırılması ve "Bilim" ile "Kurgu" jetonlarının "Bilim Kurgu"da bulunmasıdır. exactMatchWithOperator, true olduğunda metin tek bir jeton olarak değerlendirilir. Bu nedenle, "Science" (Bilim) veya "Fiction" (Kurgu) "Science-Fiction" (Bilim Kurgu) ile eşleşmez.

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

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

Aşağıdaki snippet'te, movieTitle özelliği displayLabel olarak ayarlanmış şekilde gösterilmektedir.

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

Aşağıda, örnek şemadaki 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ü ekleyin.

Herhangi bir 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 özelliği 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 yalnızca tercih ettiği türle eşleşen filmler otomatik tamamlama önerileri kapsamında gösterilir.

Şemanızı kaydetme

Cloud Search sorgularından yapılandırılmış verilerin döndürülmesi için şemanızı Cloud Search şema hizmetine kaydetmeniz gerekir. Şema kaydetmek 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ı kaydetmek için aşağıdaki HTTP isteğini gönderin:

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

İsteğinizin gövdesinde aşağıdakiler yer almalıdır:

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

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

Verilerinizi dizine ekleme

Şemanız kaydedildikten sonra, veri kaynağını Index çağrılarını kullanarak doldurun. Dizin oluşturma işlemi normalde içerik bağlayıcınızda yapılır.

Film şemasını kullanarak 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, şemadaki nesne tanımı adıyla nasıl eşleştiğine dikkat edin. Cloud Search, bu iki değeri eşleştirerek dizine ekleme sırasında hangi şema nesnesinin kullanılacağını bilir.

Ayrıca, releaseDate şema özelliğinin dizine eklenmesinde, year, month ve day alt özelliklerinin nasıl kullanıldığına da dikkat edin. Bu özellikler, releaseDate özelliğini tanımlamak için datePropertyOptions kullanılarak date veri türü olarak tanımlandığından devralınır. Ancak year, month ve day şemada tanımlanmadığından bu özelliklerden birini (ör. year) tek tek silin.

Ayrıca, tekrarlanabilir özellik actorName'nın değer listesi kullanılarak nasıl dizine eklendiğine de dikkat edin.

Olası dizine ekleme sorunlarını belirleme

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

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

  • Dizin oluşturma isteğinizde, şemada kayıtlı türden farklı bir tür değerine sahip mülk var. Bu sorun, Cloud Search'ün 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 verileri deposu için kaydetmeden önce daha küçük bir test verileri deposuyla test etmeyi deneyin. Daha küçük bir test deposuyla test yapma, şemanızda hızlı bir şekilde ayarlamalar yapmanıza ve dizine eklenen verileri daha büyük bir dizini veya mevcut bir üretim dizinini etkilemeden silmenize olanak tanır. Test verileri deposu için yalnızca bir test kullanıcısını yetkilendiren bir erişim kontrol listesi oluşturun. Böylece diğer kullanıcılar bu verileri arama sonuçlarında görmez.

Arama sorgularını doğrulamak için arama arayüzü oluşturmak istiyorsanız Arama arayüzü bölümüne bakın.

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

Genel bir sorguyla test etme

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

Operatörle test etme

Sorguya operatör eklemek, sonuçları bu operatör değerine uyan öğelerle sınırlar. Örneğin, belirli bir aktörün oynadığı tüm filmleri bulmak için actor operatörünü kullanmak isteyebilirsiniz. Bir arama arayüzü kullanarak bu operatör sorgusunu operator=value çifti (ör. "actor:Zane") yazıp Return tuşuna basarak kolayca gerçekleştirebilirsiniz. Zane'in oyuncu olarak yer aldığı tüm filmler arama sonuçlarında döndürülmelidir.

Şemanızı ayarlama

Şemanız ve verileriniz kullanılmaya başladıktan sonra, kullanıcılarınız için nelerin işe yarayıp nelerin yaramadığını izlemeye devam edin. Aşağıdaki durumlarda şemanızı ayarlamayı düşünebilirsiniz:

  • Daha önce dizine eklenmemiş bir alanın dizine eklenmesi. Örneğin, kullanıcılarınız yönetmen adına göre filmleri tekrar tekrar arıyor olabilir. Bu durumda, şemanızı yönetmen adını operatör olarak destekleyecek şekilde ayarlayabilirsiniz.
  • Kullanıcı geri bildirimlerine göre arama operatörü adlarını değiştirme. Operatör adları kullanıcı dostu olacak şekilde tasarlanır. Kullanıcılarınız sürekli olarak yanlış operatör adını "hatırlıyorsa", operatör adını değiştirebilirsiniz.

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

Şemanızda aşağıdaki değerlerden herhangi birini değiştirmeniz, verilerinizi yeniden dizine eklemenizi gerektirmez. Yeni bir UpdateSchema isteği göndermeniz yeterlidir. Dizininiz çalışmaya devam eder:

  • Operatör adları.
  • Minimum ve maksimum tam sayı değerleri.
  • Sıralı tam sayı ve enum.
  • Güncellik 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, güncellenen şemada aşağıdaki değişiklikler varsa bu değişikliklere dayalı sonuçları 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 kullanılan false türünü true olarak değiştirme

isFacetable veya isSortable ayarını true olarak yalnızca net bir kullanım alanınız ve ihtiyacınız varsa ayarlamalısınız.

Son olarak, bir özelliği isSuggestable olarak işaretleyerek şemanızı güncellediğinizde verilerinizi yeniden dizine eklemeniz gerekir. Bu da söz konusu özellik için otomatik tamamlama 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. Bunun nedeni, bu değişikliklerin dizini bozması veya kötü ya da tutarsız arama sonuçları üretmesidir. Bu değişiklikler şunları içerir:

  • Tesis veri türü.
  • Tesis adı.
  • exactMatchWithOperator ayarı.
  • retrievalImportance ayarı.

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

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

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

Şemanızda izin verilmeyen bir değişiklik yapmanız gereken durumlarda, genellikle aynı etkiyi elde eden bir dizi izin verilen değişiklik yapabilirsiniz. Genel olarak bu işlem, önce dizine eklenmiş mülkleri eski bir nesne tanımından daha yeni bir tanıma taşımayı, ardından yalnızca daha yeni mülkü kullanan bir dizine ekleme isteği göndermeyi içerir.

Aşağıdaki adımlarda, bir özelliğin veri türünün veya adının nasıl değiştirileceği gösterilmektedir:

  1. Şemanızdaki nesne tanımına yeni bir özellik ekleyin. Değiştirmek istediğiniz mülkten farklı bir ad kullanın.
  2. Yeni tanımı kullanarak UpdateSchema isteğini gönderin. İsteğe hem yeni hem de eski mülk dahil olmak üzere şemanın tamamını göndermeyi unutmayın.
  3. Dizini veri deposundan geriye dönük olarak doldurun. Dizini doldurmak için tüm dizine ekleme isteklerini yeni mülkü kullanarak gönderin. Ancak bu, sorgu eşleşmelerinin iki kez sayılmasına yol açacağından eski mülkü kullanmayın.

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

  5. Eski mülkün kullanımını yeni mülke taşıyın. Örneğin, mülk adını oluşturandan yazara değiştirirseniz sorgu kodunuzu, daha önce oluşturana referans veren yerlerde yazar kullanacak şekilde güncellemeniz gerekir.

Cloud Search, beklenmedik dizine ekleme sonuçlarına neden olacak yeniden kullanımlara karşı koruma sağlamak için silinen tüm özelliklerin veya nesnelerin kaydını 30 gün boyunca tutar. Bu 30 gün içinde, silinen nesnenin veya mülkün tüm kullanımını bırakmanız ve gelecekteki dizin isteklerinden bunları çıkarmanız gerekir. Bu sayede, daha sonra söz konusu 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 boyutuyla ilgili sınırlamalar uygular. Bu sınırlar şunlardır:

  • En fazla 10 üst düzey nesne olabilir.
  • Yapılandırılmış veri hiyerarşisinin maksimum derinliği 10 düzeydir.
  • Bir nesnedeki toplam alan sayısı 1.000 ile sınırlıdır. Bu sayıya temel alanların sayısı ve her iç içe yerleştirilmiş nesnedeki alan sayısının toplamı dahildir.

Sonraki Adımlar

İzleyebileceğiniz bazı sonraki adımlar:

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

  2. Şemanızı arama kalitesini artıracak şekilde ayarlayın.

  3. En iyi sorgu yorumu için bir şema oluşturun.

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

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