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à tùy 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 của bạn đọc dữ liệu từ kho lưu trữ và dựa trên giản đồ đã đăng ký, 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 một đối tượng giản đồ JSON cho API đó rồi đăng ký. 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 của mình.
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 dùng để tạo giản đồ Cloud Search:
- Xác định hành vi dự kiến của người dùng
- Khởi động nguồn dữ liệu
- Tạo giản đồ
- Hoàn thành giản đồ mẫu
- Đăng ký giản đồ của bạn
- Lập chỉ mục dữ liệu của bạn
- Kiểm thử giản đồ của bạn
- Đ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 lược đồ.
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 người dùng đang thực hiện 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 phim có diễn viên cụ thể".
Để xác định giản đồ của bạ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 các nhiệm vụ sau:
- Đánh giá một tập hợp các truy vấn đa dạng từ những người dùng khác nhau.
- Xác định các đố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 của dữ liệu liên quan, chẳng hạn như một bộ phim trong cơ sở dữ liệu phim.
- Xác định các thuộc tính và giá trị tạo thành đối tượng và có thể sử 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; có thể bao gồm các giá trị gốc hoặc các đối tượng khác. Ví dụ: đối tượng phim có thể có các thuộc tính như tiêu đề và ngày phát hành phim dưới dạng 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ư thành viên truyền, có các thuộc tính riêng, chẳng hạn như tên hoặc vai trò.
- Xác định các giá trị mẫu hợp lệ cho cơ sở lưu trú. Giá trị là dữ liệu thực tế được lập chỉ mục cho một tài sản. 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 Missing Ark".
- 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 các bộ 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 xếp hạng đối tượng và không cần sắp xếp theo thứ tự bảng chữ cái theo tiêu đề.
- (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ó ngữ cảnh cụ thể hơn, trong đó nội dung tìm kiếm có thể được thực thi, chẳng hạn như vai trò công việc hoặc phòng ban của người dùng, để có thể cung cấp nội dung đề xuất tự động hoàn thành dựa trên ngữ cảnh hay không. Ví dụ: đối với những người tìm kiếm 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 họ muốn trả về trong tìm kiếm, có thể là trong hồ sơ người dùng của họ. Sau đó, khi người dùng bắt đầu nhập truy vấn phim, chỉ những phim thuộc thể loại họ yêu thích, chẳng hạn như "phim hành động", được đề xuất dưới dạng một phần của đề xuất tự động hoàn thành.
- Lập danh sách các đối tượng, thuộc tính và giá trị mẫu này có thể 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 mục Xác định các tuỳ chọn toán tử.)
Khởi động nguồn dữ liệu
Một 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. Để xem hướng dẫn cách khởi động 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 sự 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ị dữ liệu cơ bản trong giản đồ là đối tượng, còn được gọi là "đối tượng giản đồ", là một cấu trúc dữ liệu hợp lý. Trong cơ sở dữ liệu về phim, một cấu trúc dữ liệu là "phim". 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 liên quan đến bộ 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 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 các giá trị gốc hoặc các đối tượng khác.
Hình 1 cho thấy các đối tượng phim, người và tài sản được liên kết.

Giản đồ Cloud Search về cơ bản là 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ã schema sau cho biết
các câu lệnh objectDefinitions
cho đối tượng giản đồ người và phim.
{
"objectDefinitions": [
{
"name": "movie",
...
},
{
"name": "person",
...
}
]
}
Khi xác định đối tượng giản đồ, bạn sẽ cung cấp name
cho đối tượng 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 Định nghĩa đối tượng.
Xác định các thuộc tính đối tượng
Như đã chỉ định trong tài liệu tham khảo cho ObjectDefinition, tên đối tượng được theo sau bởi một tập hợp options
và một danh sách propertyDefinitions
.
options
có thể bao gồm freshnessOptions
và displayOptions
.
freshnessOptions
được dùng để điều chỉnh thứ hạng tìm kiếm dựa trên độ cập nhật của mục. 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 của 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 biết đối tượng movie
có hai thuộc tính: movieTitle
và 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 bao gồm các mục sau:
- một chuỗi
name
. - Danh sách các tuỳ chọn loại không xác định, chẳng hạn như
isReturnable
trong đoạn mã trước. - Một loại và các tuỳ chọn dành riêng cho loại đó, chẳng hạn như
textPropertyOptions
vàretrievalImportance
trong đoạn mã trước. operatorOptions
mô tả cách sử dụng thuộc tính này 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 cũng 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, 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
để có thể hỗ trợ hai loại hành vi tìm kiếm:
- Hiển thị kết quả 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 tiêu đề của một bộ phim mà diễn viên đã đóng.
Tương tự, giản đồ sẽ sử dụng lại trường releaseDate
vì trường này có cùng ý nghĩa đối với hai trường movieTitle
.
Trong quá trình phát triển giản đồ của riêng bạn, hãy xem xét cách kho lưu trữ 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 các tùy chọn loại không xác định
PropertyDefinition liệt kê các tùy chọn chức năng tìm kiếm chung cho tất cả các thuộc tính bất kể loại dữ liệu là gì.
isReturnable
– Cho biết tài sản có xác định dữ liệu cần được trả về trong kết quả tìm kiếm hay không thông qua API truy vấn. Bạn có thể trả về tất cả các thuộc tính phim mẫu. Các thuộc tính không thể 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 trả về cho người dùng.isRepeatable
– Cho biết liệu bạn có được phép sử dụng nhiều giá trị cho tài sản hay không. Ví dụ: một 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 này có thể dùng để phân loại. Đ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ụ: có thể sắp xếp kết quả phim theo ngày phát hành hoặc xếp hạng đối tượng.isFacetable
– Cho biết thuộc tính có thể dùng để tạo các thuộc tính. Một khía cạnh được dùng để tinh chỉnh kết quả tìm kiếm, trong đó người dùng xem kết quả ban đầu, 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 với các thuộc tính có loại đố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ể làm chogenre
,actorName
,userRating
vàmpaaRating
có thể nhận dạng được để cho phép sử dụng các nhãn đó nhằm tinh chỉnh 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 ký tự đại diện cho thuộc tính này. Tuỳ chọn này chỉ có trên các tài sản 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 tuỳ thuộc vào giá trị được đặt trong trường exactMatchWithOperator. Nếu bạn đặtexactMatchWithOperator
thànhtrue
, giá trị văn bản sẽ được mã hoá dưới dạng một giá trị nguyên tử và hoạt động tìm kiếm 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ệnscience-*
sẽ khớp với giá trị đó. Nếu bạn đặtexactMatchWithOperator
thànhfalse
, giá trị văn bản sẽ được mã hoá và việc tìm kiếm 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 khoa học viễn tưởng", thì các cụm từ tìm kiếm đại diệnsci*
hoặcfi*
sẽ khớp với mục nhưngscience-*
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à giá trị boolean; tất cả đều có giá trị mặc định là false
và phải được đặt thành true
để được sử dụng.
Bảng sau đây cho thấy các tham số boolean được đặt thành true
cho tất cả thuộc tính của đối tượng movie
:
Thuộc tính | 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ả genre
và actorName
đều có isRepeatable
được đặt thành true
vì một phim có thể thuộc nhiều thể loại và thường có nhiều hơn một diễn viê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 chứa 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 loại 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 đố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 đây cho biết thuộc tính movieTitle
có textPropertyOptions
cài đặt loại dữ liệu.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
...
},
...
},
Một tài sản chỉ có thể có 1 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à một ngày (ví dụ: 2016-01-13
) hoặc một chuỗi (ví dụ: January 13, 2016
), nhưng không được 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:
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 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.
Trong tình huống được tưởng tượng của giản đồ phim này, người dùng được mong đợi 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 tháng.
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 những năm với 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 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 loại đều không bắt buộc, ngoại trừ danh sách possibleValues
trong enumPropertyOptions
. Ngoài ra, tùy 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
có textPropertyOptions
thiết lập loại dữ liệu và với tuỳ chọn dành riêng cho loại retrievalImportance
.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
...
},
...
}
Dưới đây là các tuỳ chọn bổ sung cụ thể cho từng loại trong giản đồ mẫu:
Thuộc tính | Loại | Các tuỳ 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 dành riêng cho từng loại, mỗi loại còn có một tập hợp các tuỳ chọn
operatorOptions
không bắt buộc. Các tuỳ chọn này mô tả cách sử dụng thuộc tính này làm
toán tử tìm kiếm. Đoạn mã sau đây cho biết thuộc tính movieTitle
có textPropertyOptions
đặt loại dữ liệu và với các tuỳ chọn dành riêng cho loại retrievalImportance
và operatorOptions
.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
"operatorOptions": {
"operatorName": "title"
}
},
...
}
Mỗi operatorOptions
sẽ 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à tham số thực tế mà bạn muốn người dùng sẽ sử dụng khi thu hẹp nội dung tìm kiếm. Ví dụ: để tìm kiếm các bộ phim dựa trên tiêu đề của họ, người dùng sẽ nhập title:movieName
, trong đó movieName
là tên của một bộ phim.
Tên nhà cung cấp dịch vụ 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 các 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 muốn đặt thuật ngữ "tên" thay vì "tiêu đề" cho tiêu đề phim, thì tên toán tử phải được đặ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ả thuộc tính đều phân giải cùng một loại. Khi sử dụng tên toán tử dùng chung trong quá trình 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 plotSummary
và plotSynopsis
, đồng thời mỗi thuộc tính trong số này có operatorName
là plot
. Miễn là cả hai thuộc tính này đều là văn bản (textPropertyOptions
), thì một truy vấn 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 lessThanOperatorName
và greaterThanOperatorName
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 việc so sánh với giá trị đã gửi.
Cuối cùng, textOperatorOptions
có trường exactMatchWithOperator
trong operatorOptions
. Nếu bạn đặt 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ỉ nằm 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 và toán tử khớp với toán tử.
Ví dụ: hãy xem xét việc lập chỉ mục các đối tượng Sách hoặc Phim có các thuộc tính thể loại.
Các thể loại có thể bao gồm "Khoa học- viễn tưởng", "Khoa học" và "Giả tưởng". 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 "Giả tưởng" cũng sẽ trả về kết quả cho "Khoa học-Fiction" vì văn bản được mã hoá và các mã thông báo "Khoa học" và "Giả tưởng" tồn tại trong "Khoa học-Fiction".
Khi exactMatchWithOperator
là true
, văn bản được coi là một mã thông báo duy nhất, vì vậy, cả "Khoa học" lẫn "Khoa học" đều không khớp với "Khoa học-Fiction".
(Không bắt buộc) Thêm mục displayOptions
Có một phần displayOptions
không bắt buộc ở cuối bất kỳ phần propertyDefinition
nào. Phần này chứa một chuỗi displayLabel
.
displayLabel
là một nhãn văn bản đề xuất, thân thiện với người dùng cho tài sản. Nếu thuộc tính được định cấu hình để hiển thị bằng cách sử dụng ObjectDisplayOptions, thì nhãn này sẽ hiển thị 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 movieTitle
có bộ displayLabel
được đặt là "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:
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 mục 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 mục 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 mong muốn của người dùng. 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 nội dung đề xuất tự động hoàn thành.
Đăng ký giản đồ của bạ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. Việc đăng ký một giản đồ yêu cầu mã nhận dạng nguồn dữ liệu mà bạn nhận được trong bước Khởi động nguồn dữ liệu.
Sử dụng mã nhận dạng nguồn dữ liệu, đưa ra yêu cầu UpdateSchema để đăng ký giản đồ của bạn.
Như đã nêu 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 của yêu cầu phải chứa các thông tin sau:
{ "validateOnly": // true or false, "schema": { // ... Your complete schema object ... } }
Hãy 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ý.
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 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 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 của đối tượng trong giản đồ. Bằng cách so khớp 2 giá trị này, Cloud Search biết được cần sử dụng đối tượng giản đồ nào trong quá trình lập chỉ mục.
Ngoài ra, xin lưu ý rằng cách lập chỉ mục thuộc tính giản đồ releaseDate
sử dụng
các thuộc tính phụ của year
, month
và day
mà thuộc tính này kế thừa vì đượ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 thuộc tính đó.
Tuy nhiên, vì year
, month
và day
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, xin lưu ý rằng thuộc tính lặp lại actorName
được lập chỉ mục như thế nào bằng cách sử dụng danh sách giá trị.
Xác định các vấn đề có thể xảy ra trong quá trình lập chỉ mục
Có hai vấn đề thường gặp nhất liên quan đến giản đồ và hoạt động lập chỉ mục là:
Yêu cầu lập chỉ mục của bạn chứa đố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 được đă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 thử giản đồ của bạn bằng một số 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 thử nghiệm với một kho lưu trữ dữ liệu thử nghiệm 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 ACL chỉ uỷ quyền cho một người dùng kiểm thử để những người dùng khác 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á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ố cụm từ tìm kiếm 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
Một 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 dựa trên nguồn dữ liệu phim bằng cách nhập từ "titanic" và nhấn 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 nhà cung cấp dịch vụ
Việc thêm toán tử vào truy vấn sẽ giới hạn kết quả trong các mục khớp với giá trị 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ó sự tham gia của 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" và nhấn Return. Tất cả các bộ phim với Zane là diễn viên sẽ được trả về trong kết quả tìm kiếm.
Điều chỉnh giản đồ
Sau khi giản đồ và dữ liệu được sử dụng, hãy tiếp tục theo dõi những gì đang hoạt động hiệu quả và không hiệu quả cho người dùng của bạn. Bạn nên xem xét điều chỉnh giản đồ trong các trường hợp sau:
- Lập chỉ mục một trường chưa từng đượ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 khi bạn là toán tử.
- Thay đổi tên của toán tử tìm kiếm dựa trên ý kiến phản hồi của người dùng. Mục đích của toán tử là để thân thiện với người dùng. Nếu người dùng của bạn liên tục "ghi nhớ" tên toán tử không chính xác, bạn có thể xem xét 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 của mình. 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ị số nguyên tối thiểu và tối đa.
- Thứ hạng theo số nguyên và thứ tự enum.
- Tùy chọn độ mới.
- Tùy chọn hiển thị.
Đối với những thay đổi sau đây, 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 mục đó có các thay đổi sau:
- Thêm hoặc xoá tài sản hoặc đối tượng mới
- Thay đổi
isReturnable
,isFacetable
hoặcisSortable
từfalse
thànhtrue
.
Bạn nên đặt isFacetable
hoặc isSortable
thành true
chỉ nếu bạn có một trường hợp sử dụng rõ ràng và cần.
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 gây ra tình trạng trì hoãn 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 trong 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ẽ phá vỡ 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. Bao gồm các thay đổi đối với:
- Loại dữ liệu của cơ sở lưu trú.
- 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 hạn chế này.
Thay đổi giản đồ phức tạp
Để tránh những thay đổi tạo ra kết quả tìm kiếm kém 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 một thuộc tính sau khi đã đặt. Bạn không thể thực hiện các thay đổi này thông qua yêu cầu UpdateSchema đơn giản, ngay cả khi bạn lập chỉ mục lại dữ liệu.
Trong các trường hợp phải thay đổi không được phép cho giản đồ, bạn thường có thể thực hiện một loạt các thay đổi được phép để đạt được cùng một hiệu ứng. Nhìn chung, việc này bao gồm di chuyển các thuộc tính đã được lập chỉ mục từ định nghĩa đối tượng cũ sang định nghĩa mới hơn, 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 cho biết cách thay đổi loại dữ liệu hoặc tên thuộc tính:
- Thêm một thuộc tính mới vào định nghĩa đối tượng trong giản đồ. Sử dụng tên khác với thuộc tính bạn muốn thay đổi.
- Đưa ra yêu cầu UpdateSchema 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à thuộc tính cũ, trong yêu cầu.
Chèn lấp 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 so khớp hai cụm từ tìm kiếm.
- Trong quá trình lập chỉ mục chèn lấp, hãy kiểm tra thuộc tính mới và mặc định sử dụng thuộc tính cũ để tránh hành vi không nhất quán.
- Sau khi chèn lấp hoàn tất, hãy chạy truy vấn thử nghiệm để xác minh.
Xoá tài sản cũ. Phát hành một yêu cầu UpdateSchema khác 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.
Di chuyển mọi hoạt động 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 tài sản từ người sáng tạo thành tác giả, bạn phải cập nhật mã truy vấn của mình để sử dụng tác giả nơi tài sản đó được tham chiếu trước đó.
Cloud Search lưu giữ hồ sơ về mọi tài sản hoặc đối tượng đã xoá trong 30 ngày để bảo vệ khỏi việc 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 việc sử dụng đối tượng hoặc thuộc tính đã xoá, bao gồm cả việc bỏ các đối tượng hoặc thuộc tính đó khỏi 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 thuộc tính hoặc đối tượng đó, thì bạn có thể thực hiện theo cách duy trì độ 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 dụng giới hạn về kích thước của các đối tượng dữ liệu có cấu trúc và giản đồ. Những 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 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 được giới hạn ở 1000, bao gồm số lượng trường gốc cộng với tổng số trường trong mỗi đối tượng được lồng.
Các bước tiếp theo
Sau đây là một vài bước tiếp theo bạn có thể thực hiện:
Tạo một giao diện tìm kiếm để kiểm thử giản đồ của bạn.
Hãy điều chỉnh giản đồ của bạn để cải thiện chất lượng tìm kiếm.
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 được sử dụng trong công ty. Để sử dụng giản đồ_dictionaryEntry
, hãy tham khảo bài viết Xác định từ đồng nghĩa.Tạo trình kết nối.