Tạo và đăng ký giản đồ

Lược đồ Google Cloud Search là một cấu trúc JSON xác định các đối tượng, thuộc tính và lựa chọn sẽ được dùng để lập chỉ mục và truy vấn dữ liệu của bạn. Trình kết nối nội dung sẽ đọc dữ liệu từ kho lưu trữ của bạn, đồng thời dựa trên giản đồ đã đăng ký, trình kết nối này sẽ cấu trúc và lập chỉ mục dữ liệu.

Bạn có thể tạo một giản đồ bằng cách cung cấp đối tượng giản đồ JSON cho API rồi đăng ký đối tượng đó. Bạn phải đăng ký một đối tượng lược đồ cho từng kho lưu trữ trước khi có thể lập chỉ mục dữ liệu.

Tài liệu này trình bày những thông tin cơ bản về việc tạo giản đồ. Để biết thông tin về cách điều chỉnh giản đồ nhằm cải thiện trải nghiệm tìm kiếm, hãy tham khảo bài viết Cải thiện chất lượng tìm kiếm.

Tạo giản đồ

Sau đây là danh sách các bước dùng để tạo giản đồ Cloud Search:

  1. Xác định hành vi dự kiến của người dùng
  2. Khởi tạo nguồn dữ liệu
  3. Tạo giản đồ
  4. Hoàn tất giản đồ mẫu
  5. Đăng ký giản đồ
  6. Lập chỉ mục dữ liệu của bạn
  7. Kiểm thử giản đồ
  8. Điều chỉnh giản đồ

Xác định hành vi dự kiến của người dùng

Việc dự đoán các loại cụm từ tìm kiếm mà người dùng sử dụng sẽ giúp định hướng chiến lược của bạn để tạo giản đồ.

Ví dụ: khi đưa ra các truy vấn đối với một cơ sở dữ liệu phim, bạn có thể dự đoán người dùng sẽ đưa ra một truy vấn như "Cho tôi xem tất cả các bộ phim có sự tham gia của Robert Redford". Do đó, giản đồ của bạn phải hỗ trợ kết quả truy vấn dựa trên "tất cả các bộ phim có một diễn viên cụ thể".

Để xác định giản đồ nhằm phản ánh các mẫu hành vi của người dùng, hãy cân nhắc thực hiện những việc sau:

  1. Đánh giá một tập hợp đa dạng các truy vấn mong muốn của nhiều người dùng.
  2. Xác định những đối tượng có thể được dùng trong các truy vấn. Đối tượng là các tập hợp logic gồm dữ liệu liên quan, chẳng hạn như một bộ phim trong cơ sở dữ liệu phim.
  3. Xác định các thuộc tính và giá trị tạo nên đối tượng và có thể được dùng trong các truy vấn. Thuộc tính là các thuộc tính có thể lập chỉ mục của đối tượng; chúng có thể bao gồm các giá trị nguyên thuỷ hoặc các đối tượng khác. Ví dụ: một đối tượng phim có thể có các thuộc tính như tiêu đề và ngày phát hành của phim dưới dạng các giá trị nguyên thuỷ. Đối tượng phim cũng có thể chứa các đối tượng khác, chẳng hạn như diễn viên, có các thuộc tính riêng, chẳng hạn như tên hoặc vai trò của họ.
  4. Xác định các giá trị hợp lệ mẫu cho các thuộc tính. Giá trị là dữ liệu thực tế được lập chỉ mục cho một thuộc tính. Ví dụ: tiêu đề của một bộ phim trong cơ sở dữ liệu của bạn có thể là "Raiders of the Lost Ark" (Hàm ý: "Raiders of the Lost Ark").
  5. Xác định các lựa chọn sắp xếp và xếp hạng mà người dùng mong muốn. Ví dụ: khi truy vấn phim, người dùng có thể muốn sắp xếp theo thứ tự thời gian và xếp hạng theo điểm đánh giá của khán giả, chứ không cần sắp xếp theo bảng chữ cái theo tiêu đề.
  6. (không bắt buộc) Cân nhắc xem một trong các thuộc tính của bạn có đại diện cho một ngữ cảnh cụ thể hơn mà trong đó các cụm từ tìm kiếm có thể được thực hiện hay không, chẳng hạn như vai trò công việc hoặc bộ phận của người dùng, để có thể cung cấp các đề xuất tự động hoàn thành dựa trên ngữ cảnh. Ví dụ: đối với những người tìm kiếm trong cơ sở dữ liệu phim, người dùng có thể chỉ quan tâm đến một thể loại phim nhất định. Người dùng sẽ xác định thể loại mà họ muốn kết quả tìm kiếm trả về, có thể là một phần trong hồ sơ người dùng của họ. Sau đó, khi người dùng bắt đầu nhập một cụm từ tìm kiếm về phim, chỉ những bộ phim thuộc thể loại mà họ yêu thích (chẳng hạn như "phim hành động") mới được đề xuất trong số các cụm từ đề xuất tự động hoàn thành.
  7. Lập danh sách các đối tượng, thuộc tính và giá trị mẫu này có thể được dùng trong các lượt tìm kiếm. (Để biết thông tin chi tiết về cách sử dụng danh sách này, hãy xem phần Xác định các lựa chọn về toán tử.)

Khởi chạy nguồn dữ liệu

Nguồn dữ liệu đại diện cho dữ liệu từ một kho lưu trữ đã được lập chỉ mục và lưu trữ trong Google Cloud. Để biết hướng dẫn về cách khởi tạo một nguồn dữ liệu, hãy tham khảo bài viết Quản lý nguồn dữ liệu bên thứ ba.

Kết quả tìm kiếm của người dùng được trả về từ nguồn dữ liệu. Khi người dùng nhấp vào một kết quả tìm kiếm, Cloud Search sẽ chuyển người dùng đến mục thực tế bằng URL được cung cấp trong yêu cầu lập chỉ mục.

Xác định các đối tượng

Đơn vị cơ bản của dữ liệu trong một giản đồ là đối tượng, còn được gọi là "đối tượng giản đồ", đây là cấu trúc logic của dữ liệu. Trong cơ sở dữ liệu phim, một cấu trúc dữ liệu logic là "phim". Một đối tượng khác có thể là "person" để biểu thị dàn diễn viên và nhân viên tham gia sản xuất bộ phim.

Mọi đối tượng trong một giản đồ đều có một loạt thuộc tính mô tả đối tượng, chẳng hạn như tiêu đề và thời lượng của một bộ phim, hoặc tên và ngày sinh của một người. Các thuộc tính của một đối tượng có thể bao gồm các giá trị nguyên thuỷ hoặc các đối tượng khác.

Hình 1 cho thấy các đối tượng phim và người cũng như các thuộc tính được liên kết.

Bản vẽ các mối kết nối lược đồ giữa các thực thể
Hình 1. Một giản đồ mẫu cho thấy 2 đối tượng và một đối tượng phụ.

Giản đồ Cloud Search về cơ bản là một danh sách các câu lệnh định nghĩa đối tượng được xác định trong thẻ objectDefinitions. Đoạn mã giản đồ sau đây cho thấy các câu lệnh objectDefinitions cho các đối tượng giản đồ phim và người.

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

Khi xác định một đối tượng giản đồ, bạn sẽ cung cấp một name cho đối tượng đó. name này phải là duy nhất trong số tất cả các đối tượng khác trong giản đồ. Thông thường, bạn sẽ sử dụng giá trị name mô tả đối tượng, chẳng hạn như movie cho đối tượng phim. Dịch vụ giản đồ sử dụng trường name làm mã nhận dạng khoá cho các đối tượng có thể lập chỉ mục. Để biết thêm thông tin về trường name, hãy tham khảo Định nghĩa đối tượng.

Xác định các thuộc tính của đối tượng

Như được chỉ định trong tài liệu tham khảo cho ObjectDefinition, tên đối tượng theo sau là một tập hợp options và một danh sách propertyDefinitions. options có thể bao gồm freshnessOptionsdisplayOptions. freshnessOptions được dùng để điều chỉnh thứ hạng tìm kiếm dựa trên độ mới của một mặt hàng. displayOptions được dùng để xác định xem các nhãn và thuộc tính cụ thể có xuất hiện trong kết quả tìm kiếm của một đối tượng hay không.

Phần propertyDefinitions là nơi bạn xác định các thuộc tính cho một đối tượng, chẳng hạn như tiêu đề phim và ngày phát hành.

Đoạn mã sau đây cho thấy đối tượng movie có 2 thuộc tính: movieTitlereleaseDate.

{
  "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 bao gồm các mục sau:

  • một chuỗi name.
  • Một danh sách các lựa chọn không phụ thuộc vào loại, chẳng hạn như isReturnable trong đoạn mã trước.
  • Một loại và các lựa chọn cụ thể theo loại được liên kết, chẳng hạn như textPropertyOptionsretrievalImportance trong đoạn mã trước.
  • Một operatorOptions mô tả cách thuộc tính được dùng làm toán tử tìm kiếm.
  • Một hoặc nhiều displayOptions, chẳng hạn như displayLabel trong đoạn mã trước.

name của một thuộc tính phải là duy nhất trong đối tượng chứa, nhưng bạn có thể dùng cùng một tên trong các đối tượng và đối tượng con khác. Trong Hình 1, tiêu đề và ngày phát hành của phim được xác định hai lần: một lần trong đối tượng movie và một lần nữa trong đối tượng phụ filmography của đối tượng person. Giản đồ này sử dụng lại trường movieTitle để giản đồ có thể hỗ trợ 2 loại hành vi tìm kiếm:

  • Hiện kết quả về phim khi người dùng tìm kiếm tiêu đề của một bộ phim.
  • Hiển thị kết quả về người khi người dùng tìm kiếm tên của một bộ phim mà diễn viên đã tham gia.

Tương tự, giản đồ này sử dụng lại trường releaseDate vì trường này có cùng ý nghĩa đối với 2 trường movieTitle.

Khi phát triển giản đồ của riêng mình, hãy cân nhắc xem kho lưu trữ của bạn có thể có các trường liên quan chứa dữ liệu mà bạn muốn khai báo nhiều lần trong giản đồ hay không.

Thêm các lựa chọn không phụ thuộc vào loại

PropertyDefinition liệt kê các lựa chọn chức năng tìm kiếm chung thường gặp ở tất cả các thuộc tính, bất kể kiểu dữ liệu.

  • isReturnable – Cho biết liệu thuộc tính có xác định dữ liệu cần được trả về trong kết quả tìm kiếm thông qua Query API hay không. Tất cả các thuộc tính phim mẫu đều có thể trả về. Bạn có thể dùng các thuộc tính không trả về để tìm kiếm hoặc xếp hạng kết quả mà không cần trả về cho người dùng.
  • isRepeatable – Cho biết liệu bạn có thể dùng nhiều giá trị cho thuộc tính hay không. Ví dụ: một bộ phim chỉ có một ngày phát hành nhưng có thể có nhiều diễn viên.
  • isSortable – Cho biết rằng bạn có thể dùng thuộc tính này để sắp xếp. Điều này không thể đúng đối với các thuộc tính có thể lặp lại. Ví dụ: kết quả về phim có thể được sắp xếp theo ngày phát hành hoặc điểm xếp hạng của khán giả.
  • isFacetable – Cho biết rằng bạn có thể dùng thuộc tính này để tạo các khía cạnh. Khía cạnh được dùng để tinh chỉnh kết quả tìm kiếm, theo đó người dùng sẽ thấy kết quả ban đầu rồi thêm tiêu chí hoặc khía cạnh để tinh chỉnh thêm những kết quả đó. Lựa chọn này không thể đúng đối với các thuộc tính có loại là đối tượng và isReturnable phải đúng để đặt lựa chọn này. Cuối cùng, lựa chọn này chỉ được hỗ trợ cho các thuộc tính enum, boolean và văn bản. Ví dụ: trong giản đồ mẫu, chúng ta có thể tạo genre, actorName, userRatingmpaaRating có thể phân loại để cho phép sử dụng các thuộc tính này cho việc tinh chỉnh kết quả tìm kiếm một cách tương tác.
  • isWildcardSearchable cho biết người dùng có thể thực hiện tìm kiếm bằng ký tự đại diện cho tài sản này. Lựa chọn này chỉ áp dụng cho các thuộc tính văn bản. Cách tìm kiếm bằng ký tự đại diện hoạt động trên trường văn bản phụ thuộc vào giá trị được đặt trong trường exactMatchWithOperator. Nếu exactMatchWithOperator được đặt thành true, giá trị văn bản sẽ được mã hoá thành một giá trị nguyên tử và một cụm từ tìm kiếm có ký tự đại diện sẽ được thực hiện đối với giá trị đó. Ví dụ: nếu giá trị văn bản là science-fiction, thì một truy vấn ký tự đại diện science-* sẽ khớp với giá trị đó. Nếu exactMatchWithOperator được đặt thành false, giá trị văn bản sẽ được mã hoá và một cụm từ tìm kiếm có ký tự đại diện sẽ được thực hiện đối với từng mã thông báo. Ví dụ: nếu giá trị văn bản là "khoa học viễn tưởng", thì các truy vấn ký tự đại diện sci* hoặc fi* sẽ khớp với mục, nhưng science-* sẽ không khớp.

Tất cả các tham số chức năng tìm kiếm chung này đều là giá trị boolean; tất cả đều có giá trị mặc định là false và phải được đặt thành true để sử dụng.

Bảng sau đây cho thấy các tham số boolean được đặt thành true cho tất cả các thuộc tính của đối tượng movie:

Thuộc tính 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

Cả genreactorName đều có isRepeatable được đặt thành true vì một bộ phim có thể thuộc nhiều thể loại và thường có nhiều diễn viên. Bạn không thể sắp xếp một thuộc tính nếu thuộc tính đó có thể lặp lại hoặc nằm trong một đối tượng phụ có thể lặp lại.

Xác định loại

Phần tham chiếu PropertyDefinition liệt kê một số xxPropertyOptions, trong đó xx là một loại cụ thể, chẳng hạn như boolean. Để đặt kiểu dữ liệu của thuộc tính, bạn phải xác định đối tượng kiểu dữ liệu thích hợp. Việc xác định một đối tượng kiểu dữ liệu cho một thuộc tính sẽ thiết lập kiểu dữ liệu của thuộc tính đó. Ví dụ: việc xác định textPropertyOptions cho thuộc tính movieTitle cho biết tên phim thuộc loại văn bản. Đoạn mã sau đây cho thấy thuộc tính movieTitle với chế độ cài đặt textPropertyOptions kiểu dữ liệu.

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

Một thuộc tính chỉ có thể có một loại dữ liệu được liên kết. Ví dụ: trong giản đồ phim của chúng tôi, releaseDate chỉ có thể là ngày (ví dụ: 2016-01-13) hoặc một chuỗi (ví dụ: January 13, 2016), nhưng không được dùng cả hai.

Sau đây là các đối tượng kiểu dữ liệu dùng để chỉ định kiểu dữ liệu cho các thuộc tính trong giản đồ phim mẫu:

Thuộc tính Đối tượng kiểu dữ liệu
movieTitle textPropertyOptions
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions
mpaaRating textPropertyOptions

Loại dữ liệu bạn chọn cho tài sản phụ thuộc vào các trường hợp sử dụng dự kiến. Trong trường hợp giả định của giản đồ phim này, người dùng dự kiến sẽ muốn sắp xếp kết quả theo trình tự thời gian, vì vậy releaseDate là một đối tượng ngày. Ví dụ: nếu có một trường hợp sử dụng dự kiến là so sánh các bản phát hành tháng 12 qua các năm với các bản phát hành tháng 1, thì định dạng chuỗi có thể hữu ích.

Định cấu hình các tuỳ chọn dành riêng cho loại

Phần tham chiếu PropertyDefinition liên kết đến các lựa chọn cho từng loại. Hầu hết các lựa chọn dành riêng cho loại đều là lựa chọn không bắt buộc, ngoại trừ danh sách possibleValues trong enumPropertyOptions. Ngoài ra, lựa chọn orderedRanking cho phép bạn xếp hạng các giá trị tương ứng với nhau. Đoạn mã sau đây cho thấy thuộc tính movieTitle với textPropertyOptions thiết lập kiểu dữ liệu và với lựa chọn dành riêng cho kiểu retrievalImportance.

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

Sau đây là các lựa chọn bổ sung theo từng loại được dùng trong giản đồ mẫu:

Thuộc tính Loại Các lựa chọn dành riêng cho từng loại
movieTitle textPropertyOptions retrievalImportance
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions orderedRanking, maximumValue
mpaaRating textPropertyOptions

Xác định các lựa chọn dành cho toán tử

Ngoài các lựa chọn dành riêng cho từng loại, mỗi loại đều có một tập hợp các lựa chọn không bắt buộc operatorOptions Các lựa chọn này mô tả cách thuộc tính được dùng làm toán tử tìm kiếm. Đoạn mã sau đây cho thấy thuộc tính movieTitle với textPropertyOptions đặt kiểu dữ liệu và với các lựa chọn dành riêng cho kiểu retrievalImportanceoperatorOptions.

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

Mỗi operatorOptions đều có một operatorName, chẳng hạn như title cho một movieTitle. Tên toán tử là toán tử tìm kiếm cho thuộc tính. Toán tử tìm kiếm là tham số thực tế mà bạn muốn người dùng sử dụng khi thu hẹp phạm vi tìm kiếm. Ví dụ: để tìm phim dựa trên tiêu đề, người dùng sẽ nhập title:movieName, trong đó movieName là tên của một bộ phim.

Tên của người vận hành không nhất thiết phải giống với tên của cơ sở lưu trú. Thay vào đó, bạn nên sử dụng tên toán tử phản ánh những từ phổ biến nhất mà người dùng trong tổ chức của bạn sử dụng. Ví dụ: nếu người dùng của bạn thích dùng thuật ngữ "tên" thay vì "tiêu đề" cho tiêu đề phim, thì bạn nên đặt tên toán tử thành "tên".

Bạn có thể sử dụng cùng một tên toán tử cho nhiều thuộc tính miễn là tất cả các thuộc tính đều phân giải thành cùng một loại. Khi sử dụng tên toán tử dùng chung trong một truy vấn, tất cả các thuộc tính sử dụng tên toán tử đó sẽ được truy xuất. Ví dụ: giả sử đối tượng phim có các thuộc tính plotSummaryplotSynopsis, đồng thời mỗi thuộc tính này có một operatorNameplot. Miễn là cả hai thuộc tính này đều là văn bản (textPropertyOptions), một truy vấn duy nhất sử dụng toán tử tìm kiếm plot sẽ truy xuất cả hai.

Ngoài operatorName, các thuộc tính có thể sắp xếp có thể có các trường lessThanOperatorNamegreaterThanOperatorName trong operatorOptions. Người dùng có thể sử dụng các lựa chọn này để tạo truy vấn dựa trên thông tin so sánh với một giá trị đã gửi.

Cuối cùng, textOperatorOptions có trường exactMatchWithOperator trong operatorOptions. Nếu bạn đặt exactMatchWithOperator thành true, thì chuỗi truy vấn phải khớp với toàn bộ giá trị thuộc tính, chứ không chỉ được tìm thấy trong văn bản. Giá trị văn bản sẽ được coi là một giá trị nguyên tử trong các lượt tìm kiếm bằng toán tử và lượt so khớp khía cạnh.

Ví dụ: hãy cân nhắc việc lập chỉ mục các đối tượng Sách hoặc Phim bằng các thuộc tính thể loại. Thể loại có thể bao gồm "Khoa học viễn tưởng", "Khoa học" và "Tiểu thuyết". Khi exactMatchWithOperator được đặt thành false hoặc bị bỏ qua, việc tìm kiếm một thể loại hoặc chọn khía cạnh "Khoa học" hoặc "Viễn tưởng" cũng sẽ trả về kết quả cho "Khoa học viễn tưởng" vì văn bản được mã hoá và mã thông báo "Khoa học" và "Viễn tưởng" tồn tại trong "Khoa học viễn tưởng". Khi exactMatchWithOperatortrue, văn bản sẽ được coi là một mã thông báo duy nhất, vì vậy, cả "Khoa học" và "Viễn tưởng" đều không khớp với "Khoa học viễn tưởng".

(Không bắt buộc) Thêm phần displayOptions

Có một phần displayOptions không bắt buộc ở cuối phần propertyDefinition bất kỳ. Phần này chứa một chuỗi displayLabel. displayLabel là nhãn văn bản thân thiện với người dùng và được đề xuất cho tài sản. Nếu thuộc tính được định cấu hình để hiển thị bằng ObjectDisplayOptions, nhãn này sẽ xuất hiện trước thuộc tính. Nếu thuộc tính được định cấu hình để hiển thị và displayLabel không được xác định, thì chỉ giá trị thuộc tính mới được hiển thị.

Đoạn mã sau đây cho thấy thuộc tính movieTitledisplayLabel được đặt thành "Title" (Tiêu đề).

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

Sau đây là các giá trị displayLabel cho tất cả các thuộc tính của đối tượng movie trong giản đồ mẫu:

Thuộc tính displayLabel
movieTitle Title
releaseDate Release date
genre Genre
duration Run length
actorName Actor
userRating Audience score
mpaaRating MPAA rating

(Không bắt buộc) Thêm phần suggestionFilteringOperators[]

Có một phần suggestionFilteringOperators[] (không bắt buộc) ở cuối phần propertyDefinition bất kỳ. Hãy sử dụng phần này để xác định một thuộc tính dùng để lọc các đề xuất tự động hoàn thành. Ví dụ: bạn có thể xác định toán tử genre để lọc các đề xuất dựa trên thể loại phim mà người dùng yêu thích. Sau đó, khi người dùng nhập cụm từ tìm kiếm, chỉ những bộ phim phù hợp với thể loại họ yêu thích mới xuất hiện trong các đề xuất tự động hoàn thành.

Đăng ký giản đồ

Để nhận được dữ liệu có cấu trúc từ các truy vấn trên Cloud Search, bạn phải đăng ký giản đồ của mình với dịch vụ giản đồ của Cloud Search. Để đăng ký một lược đồ, bạn cần có mã nhận dạng nguồn dữ liệu mà bạn đã nhận được trong bước Khởi tạo nguồn dữ liệu.

Sử dụng mã nhận dạng nguồn dữ liệu, hãy đưa ra yêu cầu UpdateSchema để đăng ký giản đồ của bạn.

Như được trình bày chi tiết trên trang tham chiếu UpdateSchema, hãy đưa ra yêu cầu HTTP sau đây để đăng ký giản đồ của bạn:

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

Nội dung yêu cầu của bạn phải có những thông tin sau:

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

Sử dụng tuỳ chọn validateOnly để kiểm tra tính hợp lệ của giản đồ mà không cần đăng ký giản đồ đó.

Lập chỉ mục dữ liệu

Sau khi giản đồ của bạn được đăng ký, hãy điền sẵn nguồn dữ liệu bằng các lệnh gọi Index. Việc lập chỉ mục thường được thực hiện trong trình kết nối nội dung.

Khi sử dụng giản đồ phim, yêu cầu lập chỉ mục REST API cho một bộ phim sẽ có dạng như sau:

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

Lưu ý cách giá trị của movie trong trường objectType khớp với tên định nghĩa đối tượng trong giản đồ. Bằng cách so khớp hai giá trị này, Cloud Search sẽ biết đối tượng giản đồ nào cần dùng trong quá trình lập chỉ mục.

Ngoài ra, hãy lưu ý cách lập chỉ mục thuộc tính lược đồ releaseDate sử dụng các thuộc tính phụ của year, monthday mà thuộc tính này kế thừa vì được xác định là kiểu dữ liệu date thông qua việc sử dụng datePropertyOptions để xác định. Tuy nhiên, vì year, monthday không được xác định trong giản đồ, nên bạn không thể truy vấn một trong các thuộc tính đó (ví dụ: year) riêng lẻ.

Ngoài ra, hãy lưu ý cách lập chỉ mục thuộc tính có thể lặp lại actorName bằng cách sử dụng danh sách giá trị.

Xác định các vấn đề tiềm ẩn về việc lập chỉ mục

Hai vấn đề phổ biến nhất liên quan đến lược đồ và việc lập chỉ mục là:

  • Yêu cầu lập chỉ mục của bạn chứa một đối tượng giản đồ hoặc tên thuộc tính chưa được đăng ký với dịch vụ giản đồ. Vấn đề này khiến thuộc tính hoặc đối tượng bị bỏ qua.

  • Yêu cầu lập chỉ mục của bạn có thuộc tính có giá trị loại khác với loại đã đăng ký trong giản đồ. Vấn đề này khiến Cloud Search trả về lỗi tại thời điểm lập chỉ mục.

Kiểm thử giản đồ của bạn bằng nhiều loại truy vấn

Trước khi đăng ký giản đồ cho một kho lưu trữ dữ liệu sản xuất lớn, hãy cân nhắc việc kiểm thử bằng một kho lưu trữ dữ liệu kiểm thử nhỏ hơn. Việc kiểm thử bằng một kho lưu trữ kiểm thử nhỏ hơn cho phép bạn nhanh chóng điều chỉnh giản đồ và xoá dữ liệu được lập chỉ mục mà không ảnh hưởng đến chỉ mục lớn hơn hoặc chỉ mục phát hành công khai hiện có. Đối với kho lưu trữ dữ liệu kiểm thử, hãy tạo một ACL chỉ cho phép người dùng kiểm thử để những người dùng khác sẽ không thấy dữ liệu này trong kết quả tìm kiếm.

Để tạo giao diện tìm kiếm nhằm xác thực cụm từ tìm kiếm, hãy tham khảo Giao diện tìm kiếm

Phần này chứa một số truy vấn mẫu mà bạn có thể sử dụng để kiểm thử một giản đồ phim.

Thử nghiệm bằng một cụm từ tìm kiếm chung

Một truy vấn chung sẽ trả về tất cả các mục trong nguồn dữ liệu có chứa một chuỗi cụ thể. Bằng cách sử dụng giao diện tìm kiếm, bạn có thể chạy truy vấn chung đối với một nguồn dữ liệu phim bằng cách nhập từ "titanic" rồi nhấn Return. Tất cả các bộ phim có từ "titanic" đều phải xuất hiện trong kết quả tìm kiếm.

Kiểm thử với một toán tử

Việc thêm một toán tử vào cụm từ tìm kiếm sẽ giới hạn kết quả ở những mục khớp với giá trị của toán tử đó. Ví dụ: bạn có thể muốn sử dụng toán tử actor để tìm tất cả các bộ phim có một diễn viên cụ thể đóng. Bằng cách sử dụng giao diện tìm kiếm, bạn có thể thực hiện truy vấn toán tử này chỉ bằng cách nhập một cặp operator=value, chẳng hạn như "actor:Zane" và nhấn phím Return. Tất cả những bộ phim có Zane đóng vai diễn viên đều phải xuất hiện trong kết quả tìm kiếm.

Điều chỉnh giản đồ

Sau khi bạn sử dụng giản đồ và dữ liệu, hãy tiếp tục theo dõi những gì đang hoạt động và không hoạt động đối với người dùng. Bạn nên cân nhắc điều chỉnh giản đồ cho các trường hợp sau:

  • Lập chỉ mục một trường chưa được lập chỉ mục trước đó. Ví dụ: người dùng có thể liên tục tìm kiếm phim dựa trên tên đạo diễn, vì vậy, bạn có thể điều chỉnh giản đồ để hỗ trợ tên đạo diễn dưới dạng một toán tử.
  • Thay đổi tên toán tử tìm kiếm dựa trên ý kiến phản hồi của người dùng. Tên toán tử được thiết kế để thân thiện với người dùng. Nếu người dùng liên tục "nhớ" sai tên nhà mạng, bạn có thể cân nhắc việc thay đổi tên nhà mạng.

Lập chỉ mục lại sau khi thay đổi giản đồ

Việc thay đổi bất kỳ giá trị nào sau đây trong giản đồ không yêu cầu bạn lập chỉ mục lại dữ liệu. Bạn chỉ cần gửi một yêu cầu UpdateSchema mới và chỉ mục của bạn sẽ tiếp tục hoạt động:

  • Tên nhà mạng.
  • Giá trị tối thiểu và tối đa của số nguyên.
  • Thứ hạng được sắp xếp theo số nguyên và enum.
  • Các lựa chọn về độ mới.
  • Lựa chọn hiển thị.

Đối với những thay đổi sau, dữ liệu đã được lập chỉ mục trước đó sẽ tiếp tục hoạt động theo giản đồ đã đăng ký trước đó. Tuy nhiên, bạn phải lập chỉ mục lại các mục hiện có để xem những thay đổi dựa trên giản đồ đã cập nhật nếu giản đồ có những thay đổi sau:

  • Thêm hoặc xoá một tài sản hoặc đối tượng mới
  • Thay đổi isReturnable, isFacetable hoặc isSortable từ false thành true.

Bạn chỉ nên đặt isFacetable hoặc isSortable thành true nếu bạn có trường hợp sử dụng và nhu cầu rõ ràng.

Cuối cùng, khi cập nhật giản đồ bằng cách đánh dấu một thuộc tính isSuggestable, bạn phải lập chỉ mục lại dữ liệu. Việc này sẽ gây ra sự chậm trễ trong việc sử dụng tính năng tự động hoàn thành cho thuộc tính đó.

Các thay đổi không được phép đối với tài sản

Một số thay đổi về giản đồ không được phép, ngay cả khi bạn lập chỉ mục lại dữ liệu, vì những thay đổi này sẽ làm hỏng chỉ mục hoặc tạo ra kết quả tìm kiếm kém hoặc không nhất quán. Những thay đổi này bao gồm:

  • Loại dữ liệu thuộc tính.
  • Tên cơ sở lưu trú.
  • Cài đặt exactMatchWithOperator.
  • Cài đặt retrievalImportance.

Tuy nhiên, bạn có thể khắc phục hạn chế này.

Thực hiện thay đổi giản đồ phức tạp

Để tránh những thay đổi có thể tạo ra kết quả tìm kiếm kém chất lượng hoặc chỉ mục tìm kiếm bị hỏng, Cloud Search sẽ ngăn chặn một số loại thay đổi trong các yêu cầu UpdateSchema sau khi kho lưu trữ đã được lập chỉ mục. Ví dụ: bạn không thể thay đổi kiểu dữ liệu hoặc tên của một thuộc tính sau khi đã đặt. Bạn không thể thực hiện những thay đổi này thông qua một yêu cầu UpdateSchema đơn giản, ngay cả khi bạn lập chỉ mục lại dữ liệu của mình.

Trong trường hợp bạn phải thực hiện một thay đổi không được phép đối với giản đồ của mình, bạn thường có thể thực hiện một loạt các thay đổi được phép để đạt được hiệu quả tương tự. Nhìn chung, việc này bao gồm việc di chuyển các thuộc tính được lập chỉ mục từ một định nghĩa đối tượng cũ sang một định nghĩa đối tượng mới, sau đó gửi một yêu cầu lập chỉ mục chỉ sử dụng thuộc tính mới hơn.

Các bước sau đây cho thấy cách thay đổi kiểu dữ liệu hoặc tên của một thuộc tính:

  1. Thêm một thuộc tính mới vào định nghĩa đối tượng trong giản đồ của bạn. Sử dụng một tên khác với tên của tài sản mà bạn muốn thay đổi.
  2. Đưa ra yêu cầu UpdateSchema bằng định nghĩa mới. Hãy nhớ gửi toàn bộ giản đồ, bao gồm cả thuộc tính mới và cũ, trong yêu cầu.
  3. Bổ sung chỉ mục từ kho lưu trữ dữ liệu. Để điền lại chỉ mục, hãy gửi tất cả các yêu cầu lập chỉ mục bằng cách sử dụng thuộc tính mới, nhưng không sử dụng thuộc tính cũ, vì điều này sẽ dẫn đến việc tính trùng các kết quả trùng khớp của truy vấn.

    1. Trong quá trình điền dữ liệu chỉ mục, hãy kiểm tra thuộc tính mới và mặc định là thuộc tính cũ để tránh hành vi không nhất quán.
    2. Sau khi quá trình bổ sung hoàn tất, hãy chạy các truy vấn kiểm thử để xác minh.
  4. Xoá tài sản cũ. Đưa ra một yêu cầu UpdateSchema khác mà không có tên thuộc tính cũ và ngừng sử dụng tên thuộc tính cũ trong các yêu cầu lập chỉ mục trong tương lai.

  5. Di chuyển mọi hoạt động sử dụng tài sản cũ sang tài sản mới. Ví dụ: nếu thay đổi tên thuộc tính từ creator thành author, bạn phải cập nhật mã truy vấn để sử dụng author ở nơi trước đây tham chiếu đến creator.

Cloud Search lưu giữ hồ sơ của mọi tài sản hoặc đối tượng đã xoá trong 30 ngày để ngăn chặn mọi trường hợp sử dụng lại có thể gây ra kết quả lập chỉ mục không mong muốn. Trong vòng 30 ngày đó, bạn nên di chuyển khỏi mọi hoạt động sử dụng đối tượng hoặc thuộc tính đã xoá, bao gồm cả việc bỏ qua các đối tượng hoặc thuộc tính đó trong các yêu cầu lập chỉ mục trong tương lai. Điều này đảm bảo rằng nếu sau này quyết định khôi phục thuộc tính hoặc đối tượng đó, bạn có thể làm như vậy mà vẫn duy trì được tính chính xác của chỉ mục.

Biết các giới hạn về kích thước

Cloud Search áp đặt các giới hạn về kích thước của các đối tượng và giản đồ dữ liệu có cấu trúc. Các hạn mức này là:

  • Số lượng đối tượng cấp cao nhất tối đa là 10 đối tượng.
  • Độ sâu tối đa của một hệ thống phân cấp dữ liệu có cấu trúc là 10 cấp.
  • Tổng số trường trong một đối tượng bị giới hạn ở mức 1.000, bao gồm số lượng trường nguyên thuỷ cộng với tổng số trường trong mỗi đối tượng lồng nhau.

Các bước tiếp theo

Sau đây là một số bước tiếp theo bạn có thể thực hiện:

  1. Tạo một giao diện tìm kiếm để kiểm thử giản đồ của bạn.

  2. Điều chỉnh giản đồ để cải thiện chất lượng tìm kiếm.

  3. Cấu trúc một giản đồ để diễn giải truy vấn tối ưu.

  4. Tìm hiểu cách tận dụng giản đồ _dictionaryEntry để xác định từ đồng nghĩa cho các thuật ngữ thường dùng trong công ty của bạn. Để sử dụng giản đồ _dictionaryEntry, hãy tham khảo phần Xác định từ đồng nghĩa.

  5. Tạo một trình kết nối.