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

Giản đồ Google Cloud Search là một cấu trúc JSON xác định các đối tượng, thuộc tính và tuỳ chọn sẽ được dùng trong quá trình 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 của bạn đọc dữ liệu từ kho lưu trữ và dựa trên giản đồ đã đăng ký của bạn, cấu trúc và lập chỉ mục dữ liệu.

Bạn có thể tạo giản đồ bằng cách cung cấp một đố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 giản đồ 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 các thông tin cơ bản về việc tạo giản đồ. Để biết thông tin về cách tinh 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 đượ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 động nguồn dữ liệu
  3. Tạo giản đồ
  4. Giản đồ mẫu hoàn chỉnh
  5. Đăng ký giản đồ
  6. Lập chỉ mục dữ liệu
  7. Kiểm tra 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 truy vấn mà người dùng thực hiện sẽ giúp định hướng chiến lược tạo giản đồ của bạn.

Ví dụ: khi đưa ra các truy vấn dựa trên cơ sở dữ liệu phim, bạn có thể dự đoán rằng người dùng sẽ thực hiện truy vấn, chẳng hạ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 mẫu hành vi của người dùng, hãy cân nhắc thực hiện các tác vụ sau:

  1. Đánh giá một tập hợp đa dạng các cụm từ tìm kiếm mà nhiều người dùng mong muốn.
  2. Xác định các đối tượng có thể dùng trong truy vấn. Đối tượng là tập hợp logic của các dữ liệu liên quan, chẳng hạn như phim trong cơ sở dữ liệu về phim.
  3. Xác định các thuộc tính và giá trị cấu thành đối tượng và có thể dùng trong 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; có thể bao gồm cả giá trị nguyên gốc hoặc các đối tượng khác. Chẳng hạn, một đối tượng phim có thể có các thuộc tính như tên phim và ngày phát hành dưới dạng các giá trị gốc. Đố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ò.
  4. Xác định ví dụ về giá trị hợp lệ 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".
  5. Xác định các tuỳ 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 trình tự thời gian và thứ hạng theo điểm xếp hạng của đối tượng người xem mà không cần phải sắp xếp theo thứ tự bảng chữ cái của 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 ngữ cảnh cụ thể hơn mà các lượt tìm kiếm có thể được thực thi 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 đề 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 cơ sở dữ liệu về phim, có thể người dùng 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 họ muốn 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 cụm từ tìm kiếm về phim, hệ thống chỉ đề xuất phim thuộc thể loại yêu thích (chẳng hạn như "phim hành động") trong các đề xuất tự động hoàn thành.
  7. Tạo một danh sách các đối tượng, thuộc tính và giá trị mẫu này có thể dùng trong nội dung 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 tuỳ chọn toán tử.)

Khởi động nguồn dữ liệu

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

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

Xác định đối tượng của bạn

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

Mỗi đối tượng trong giản đồ có một loạt thuộc tính hoặc 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. Thuộc tính của một đối tượng có thể bao gồm giá trị gốc hoặc các đối tượng khác.

Hình 1 hiển thị phim và đối tượng người và các thuộc tính liên quan.

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

Về cơ bản, giản đồ Cloud Search 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 cung cấp name cho đối tượng 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 giá trị nhận dạng chính 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 phần Định nghĩa đối tượng.

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

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

Đoạn mã sau đây cho thấy đối tượng movie có hai 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.
  • Danh sách các tuỳ chọn không phân biệt loại, chẳng hạn như isReturnable trong đoạn mã trước.
  • Kiểu dữ liệu và các tuỳ chọn cụ thể theo kiểu liên kết, chẳng hạn như textPropertyOptionsretrievalImportance trong đoạn mã trước.
  • 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ể sử dụng cùng tên trong các đối tượng và đối tượng phụ khác. Trong Hình 1, tên và ngày phát hành phim đã được xác định hai lần: một lần trong đối tượng movie và một lần nữa ở đối tượng phụ filmography của đối tượng person. Giản đồ này sử dụng lại trường movieTitle để có thể hỗ trợ hai loại hành vi tìm kiếm:

  • Hiện kết quả tìm kiếm phim khi người dùng tìm kiếm theo tựa phim.
  • Cho thấy kết quả tìm kiếm người khi người dùng tìm kiếm tiêu đề của bộ phim mà một diễn viên đóng trong đó.

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 bạn, hãy cân nhắc cách 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 đồ.

Thêm tuỳ chọn không phân biệt loại

PropertyDefinition liệt kê các tuỳ chọn chức năng tìm kiếm chung phổ biến cho tất cả thuộc tính bất kể loại 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 API Truy vấn hay không. Tất cả các thuộc tính phim mẫu đều có thể trả về. Các thuộc tính không trả về có thể được dùng để tìm kiếm hoặc xếp hạng kết quả mà không cần được trả về cho người dùng.
  • isRepeatable – Cho biết thuộc tính có được phép sử dụng nhiều giá trị 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 thuộc tính có thể dùng để sắp xếp. Điều này không đúng đối với các thuộc tính có thể lặp lại. Ví dụ: kết quả phim ảnh có thể được sắp xếp theo ngày phát hành hoặc mức phân loại đối tượng người xem.
  • isFacetable – Cho biết thuộc tính có thể dùng để tạo facets. Một thuộc tính được dùng để tinh chỉnh kết quả tìm kiếm, theo đó người dùng nhìn thấy kết quả ban đầu và sau đó thêm tiêu chí hoặc khía cạnh để tinh chỉnh thêm các kết quả đó. Tuỳ chọn này không thể đúng cho các thuộc tính có kiểu là đối tượng và isReturnable phải đúng để đặt tuỳ chọn này. Cuối cùng, tuỳ 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 tôi có thể tạo giao diện genre, actorName, userRatingmpaaRating để cho phép sử dụng chúng nhằm tinh chỉnh tương tác các kết quả tìm kiếm.
  • isWildcardSearchable cho biết người dùng có thể thực hiện tìm kiếm theo ký tự đại diện cho thuộc tính này. Lựa chọn này chỉ có trên các thuộc tính văn bản. Cách hoạt động của tính năng tìm kiếm theo ký tự đại diện trên trường văn bản phụ thuộc vào giá trị được đặt trong trường exactMatchWithOperator. Nếu bạn đặt exactMatchWithOperator thành true, thì giá trị văn bản sẽ được mã hoá thành một giá trị nguyên tử và thao tác tìm kiếm theo ký tự đại diện sẽ được thực hiện dựa trên giá trị đó. Ví dụ: nếu giá trị văn bản là science-fiction, thì truy vấn ký tự đại diện science-* sẽ khớp với giá trị đó. Nếu bạn đặt exactMatchWithOperator thành false, thì giá trị văn bản sẽ được mã hoá và thao tác tìm kiếm theo 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ì ký tự đại diện truy vấn sci* hoặc fi* sẽ khớp với mục, nhưng science-* không khớp với mục đó.

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

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

Tài sản isReturnable isRepeatable isSortable isFacetable isWildcardSearchable
movieTitle đúng đúng
releaseDate đúng đúng
genre đúng đúng đúng
duration đúng
actorName đúng đúng đúng đúng
userRating đúng đúng
mpaaRating đúng đúng

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. Một thuộc tính không thể sắp xếp được 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 sẽ liệt kê một số xxPropertyOptions, trong đó xx là một loại cụ thể, chẳng hạn như boolean. Để đặt loại dữ liệu của thuộc tính, bạn phải xác định đối tượng loại dữ liệu thích hợp. Việc xác định đối tượng loại dữ liệu cho một thuộc tính sẽ thiết lập loại 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 rằng tiêu đề phim thuộc loại văn bản. Đoạn mã sau cho thấy thuộc tính movieTitle, trong đó textPropertyOptions đặt loại dữ liệu.

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

Một tài sản chỉ có thể có một loại dữ liệu 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 phải cả hai.

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

Tài sản Đối tượng loại dữ liệu
movieTitle textPropertyOptions
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions
mpaaRating textPropertyOptions

Loại dữ liệu mà 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 của bạn. Trong tình huống tưởng tượng của giản đồ phim này, người dùng phải sắp xếp các kết quả theo trình tự thời gian, vì vậy, releaseDate là đố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 trong 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 theo loại cụ thể

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

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

Sau đây là các tuỳ chọn bổ sung theo loại cụ thể được sử dụng trong giản đồ mẫu:

Tài sản Loại Tùy chọn theo loại cụ thể
movieTitle textPropertyOptions retrievalImportance
releaseDate datePropertyOptions
genre enumPropertyOptions
duration textPropertyOptions
actorName textPropertyOptions
userRating integerPropertyOptions orderedRanking, maximumValue
mpaaRating textPropertyOptions

Xác định các tuỳ chọn toán tử

Ngoài các tuỳ chọn cụ thể theo loại, mỗi loại còn có một tập hợp các tuỳ chọn operatorOptions. Các tuỳ 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 loại dữ liệu và với các tuỳ chọn dành riêng cho loại 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 movieTitle. Tên toán tử là toán tử tìm kiếm cho tài sản. Toán tử tìm kiếm là thông số thực tế mà bạn muốn người dùng sử dụng khi thu hẹp nội dung tìm kiếm. Ví dụ: để tìm kiếm phim dựa trên tên phim, người dùng cần nhập title:movieName, trong đó movieName là tên phim.

Tên nhà điều hành không cần phải giống với tên thuộc tính. 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 thích cụm từ "name" thay vì "title" (tiêu đề) đối với tên phim, thì tên toán tử phải được đặt thành "name".

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 cùng một kiểu. 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ó operatorNameplot. Miễn là cả hai thuộc tính này đều là văn bản (textPropertyOptions), thì 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 tuỳ 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 thiết lập exactMatchWithOperator thành true, chuỗi truy vấn phải khớp với toàn bộ giá trị thuộc tính chứ không chỉ tìm được trong văn bản. Giá trị văn bản được coi là một giá trị nguyên tử trong các lượt tìm kiếm toán tử và so khớp các 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 có thuộc tính thể loại. Thể loại có thể bao gồm "Khoa học-Fiction", "Khoa học" và "Trí tưởng". Nếu bạn đặt exactMatchWithOperator thành false hoặc bỏ qua, việc tìm kiếm một thể loại hoặc chọn thuộc tính "Khoa học" hoặc "Fiction" cũng sẽ trả về kết quả cho "Khoa học-Fiction" vì văn bản được mã hoá thành mã thông báo và các mã thông báo "Khoa học" và "Fiction" tồn tại trong "Khoa học-Fiction". 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à "Fiction" sẽ không khớp với "Khoa học-Fiction".

(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à một nhãn văn bản thân thiện với người dùng và được đề xuất cho thuộc tính này. Nếu thuộc tính được định cấu hình để hiển thị bằng ObjectDisplayOptions, nhãn này sẽ hiển thị phía 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 được hiển thị.

Đoạn mã sau cho thấy thuộc tính movieTitledisplayLabel được đặt thành "Title".

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

Tài sản 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 bất kỳ phần propertyDefinition nào. 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ử của genre để lọc các đề xuất dựa trên thể loại phim mà người dùng ưu tiên. 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 mà họ ưu tiên mới xuất hiện trong nội dung đề xuất tự động hoàn thành.

Đăng ký giản đồ

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

Bằng cách sử dụng mã nguồn dữ liệu, hãy đưa ra một yêu cầu UpdateSchema để đăng ký giản đồ của bạn.

Như đã nêu chi tiết trên trang tham khảo 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 thực sự đăng ký giản đồ đó.

Lập chỉ mục dữ liệu của bạn

Sau khi giản đồ của bạn được đăng ký, hãy điền nguồn dữ liệu bằng cách sử dụng các lệnh gọi Chỉ mục. 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 API REST cho một 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"
}

Hãy 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 cần sử dụng đối tượng giản đồ nào 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 giản đồ releaseDate sử dụng các thuộc tính phụ year, monthday mà thuộc tính này kế thừa vì thuộc tính này được xác định là một loại 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).

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 các giá trị.

Xác định các vấn đề có thể xảy ra liên quan đến việc lập chỉ mục

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

  • Yêu cầu lập chỉ mục của bạn có 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 đồ. Sự cố này khiến Cloud Search trả về lỗi tại thời điểm lập chỉ mục.

Kiểm tra giản đồ bằng một số loại truy vấn

Trước khi bạn đă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 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 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 đã lập chỉ mục mà không ảnh hưởng đến chỉ mục lớn hơn hoặc chỉ mục sản xuất hiện có. Đối với kho lưu trữ dữ liệu kiểm thử, hãy tạo một Danh sách kiểm soát quyền truy cập (ACL) chỉ cấp quyền cho người dùng thử nghiệm để 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 phần 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.

Kiểm thử bằng truy vấn chung

Truy vấn chung trả về tất cả các mục trong nguồn dữ liệu chứa một chuỗi cụ thể. Khi 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 vào Return. Tất cả phim có từ "titanic" sẽ được trả về trong kết quả tìm kiếm.

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

Việc thêm một toán tử vào truy vấn sẽ giới hạn kết quả ở các mục khớp với giá trị của toán tử đó. Ví dụ: bạn nên sử dụng toán tử actor để tìm tất cả các phim có một diễn viên cụ thể. Khi 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" rồi nhấn Return. Tất cả phim có Zane là diễn viên sẽ được trả về trong kết quả tìm kiếm.

Điều chỉnh giản đồ của bạn

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

  • Lập chỉ mục một trường mà trước đó chưa được lập chỉ mụ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 đồ của mình để hỗ trợ tên đạo diễn với tư cách là toán tử.
  • Thay đổi tên toán tử tìm kiếm dựa trên phản hồi của người dùng. Tên toán tử cần phải thân thiện với người dùng. Nếu người dùng liên tục "nhớ" tên toán tử không chính xác, bạn có thể cân nhắc việc thay đổi tên đó.

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 đồ của bạn không yêu cầu bạn phải lập chỉ mục lại dữ liệu. Bạn chỉ cần gửi 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à cung cấp dịch vụ.
  • Giá trị tối thiểu và tối đa của số nguyên.
  • Thứ hạng theo thứ tự enum và số nguyên.
  • Tuỳ chọn làm mới.
  • Tuỳ chọn hiển thị.

Đối với các thay đổi sau, dữ liệu đã 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 các 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á thuộc tính hoặc đối tượng mới
  • Thay đổi isReturnable, isFacetable hoặc isSortable từ false thành true.

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

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. Điều này 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 về thuộc tính không được phép

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

  • Loại dữ liệu của tài sản.
  • Tên tài sản.
  • Chế độ cài đặt exactMatchWithOperator.
  • Chế độ cài đặt retrievalImportance.

Tuy nhiên, có một cách để khắc phục giới hạn này.

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

Để tránh những thay đổi sẽ 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 một số loại thay đổi nhất định 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 loại dữ liệu hoặc tên của thuộc tính sau khi đặt chúng. 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 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 thay đổi được phép để đạt được cùng hiệu quả. Nhìn chung, quy trình này bao gồm việc di chuyển các thuộc tính đã lập chỉ mục từ định nghĩa đối tượng cũ sang định nghĩa đối tượng mới hơn trước, sau đó gửi 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 trình bày cách thay đổi loại dữ liệu hoặc tên của một tài sản:

  1. Thêm một thuộc tính mới vào phần định nghĩa đối tượng trong giản đồ của bạn. Hãy sử dụng tên khác với thuộc tính mà bạn muốn thay đổi.
  2. Gửi yêu cầu UpdateSchema (Ngôn ngữ đánh dấu mở rộng) với đị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 vào chỉ mục từ kho lưu trữ dữ liệu. Để chèn lấp chỉ mục, hãy gửi tất cả các yêu cầu lập chỉ mục bằng thuộc tính mới, nhưng không phải thuộc tính cũ, vì điều này sẽ dẫn đến việc đếm hai lần truy vấn.

    1. Trong quá trình lập chỉ mục chèn lấp, hãy kiểm tra tài sản mới và đặt tài sản cũ về tài sản cũ để tránh hoạt động không nhất quán.
    2. Sau khi hoàn tất quảng cáo thay thế, hãy chạy các truy vấn thử nghiệm để 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 sau này.

  5. Di chuyển mọi mục đích sử dụng của 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 biến (tác giả), bạn phải cập nhật mã truy vấn để sử dụng Author (Tác giả) ở nơi tham chiếu đến người tạo trước đó.

Cloud Search lưu giữ bản ghi của mọi thuộc tính hoặc đối tượng đã bị xoá trong vòng 30 ngày để ngăn chặn mọi hoạt động 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 tất cả hoạt động sử dụng đối tượng hoặc thuộc tính đã xoá, bao gồm cả việc loại bỏ chúng khỏi 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 đó bạn quyết định khôi phục lại thuộc tính hoặc đối tượng đó, bạn có thể thực hiện theo cách duy trì độ chính xác của chỉ mục.

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

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

  • Số lượng đối tượng cấp cao nhất là 10 đối tượng.
  • Chiều sâu tối đa của một hệ 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 được giới hạn ở mức 1.000, bao gồm cả số trường nguyên gốc 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

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

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

  2. Điều chỉnh giản đồ của bạ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 cụm từ tìm kiếm tối ưu.

  4. Tìm hiểu cách tận dụng giản đồ _dictionaryEntry để xác định các 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 bài viết Định nghĩa từ đồng nghĩa.

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