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 dùng trong việc 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 trong kho lưu trữ và dựa trên giản đồ bạn đã đăng ký, 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, sau đó đă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 kiến thức 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 chạy một nguồn dữ liệu
- Tạo giản đồ
- Hoàn tất giản đồ mẫu
- Đăng ký giản đồ của bạn
- Lập chỉ mục dữ liệu
- Kiểm tra giả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 đưa ra sẽ giúp định hướng chiến lược tạo giản đồ của bạn.
Ví dụ: khi đưa ra truy vấn dựa trên cơ sở dữ liệu phim, bạn có thể dự đoán việc người dùng thực hiện một truy vấn, chẳng hạn như "Cho tôi xem tất cả các phim có sự tham gia của Robert Redford". Do đó, giản đồ của bạn phải hỗ trợ các 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:
- Đánh giá một tập hợp đa dạng các cụm từ tìm kiếm mong muốn của những người dùng khác nhau.
- Xác định các đối tượng có thể được dùng trong truy vấn. Đối tượng là các tập hợp dữ liệu có liên quan theo logic, 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ị cấu thành đối tượng và có thể 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 giá trị gốc 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ư tên phim và ngày phát hành làm 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 của dàn diễn viên, có các thuộc tính riêng, chẳng hạn như tên hoặc vai trò.
- Xác định ví dụ về các giá trị hợp lệ cho thuộc tính. Giá trị là dữ liệu thực tế được lập chỉ mục cho một tài sản. Ví dụ: tên một bộ phim trong cơ sở dữ liệu của bạn có thể là "Raiders of the Lost Ark".
- Xác định những cách 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 xếp hạng khán giả và không cần sắp xếp theo thứ tự bảng chữ cái của 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ó thể hiện ngữ cảnh cụ thể hơn mà có thể thực thi hoạt động tìm kiếm hay không, chẳng hạn như bộ phận hoặc vai trò công việc 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 cơ sở dữ liệu 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 trả về nội dung tìm kiếm, 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 truy vấn phim, hệ thống chỉ đề xuất các phim thuộc thể loại mà họ muốn (chẳng hạn như "phim hành động") trong các đề xuất tự động hoàn thành.
- Tạo danh sách các đối tượng, thuộc tính và giá trị mẫu 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 phần Xác định các tuỳ chọn 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ữ trên Google Cloud. Để xem hướng dẫn về cách khởi chạy nguồn dữ liệu, hãy tham khảo bài viết Quản lý nguồn dữ liệu của 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 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
Đơ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 logic của dữ liệu. Trong cơ sở dữ liệu phim, cấu trúc logic của 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 tham gia bộ phim.
Mỗi đối tượng trong giản đồ có một loạt các 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 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 và người cũng như các thuộc tính liên quan.
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 đối tượng giản đồ Movie và person.
{
"objectDefinitions": [
{
"name": "movie",
...
},
{
"name": "person",
...
}
]
}
Khi xác định một đối tượng giản đồ, bạn cầ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 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 phần Định nghĩa đối tượng.
Xác định thuộc tính của đối tượng
Như đã chỉ định trong tham chiếu về ObjectDefinition (Định nghĩa đối tượng), theo sau tên đối tượng là một bộ options
và danh sách propertyDefinitions
.
options
có thể còn bao gồm freshnessOptions
và displayOptions
.
freshnessOptions
dùng để điều chỉnh thứ hạng tìm kiếm dựa trên độ mới của một mục. displayOptions
được dùng để xác định xem các nhãn và thuộc tính cụ thể có hiển thị 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ư 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: 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:
- chuỗi
name
. - Danh sách các tuỳ chọn không phân biệt về kiểu, chẳng hạn như
isReturnable
trong đoạn mã trước. - Một loại và các tuỳ chọn cụ thể về từng loại có liên kết, chẳng hạn như
textPropertyOptions
vàretrievalImportance
trong đoạn mã trước. operatorOptions
mô tả cách thuộc tính được sử 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 một tên trong các đối tượng và đối tượng phụ khác.
Trong Hình 1, tên phim và ngày phát hành đã được xác định 2 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ợ 2 loại hành vi tìm kiếm sau đây:
- Hiện kết quả phim khi người dùng tìm tên một bộ phim.
- Hiện kết quả tìm kiếm người khi người dùng tìm kiếm tiêu đề của một bộ phim mà một diễn viên đã đóng.
Tương tự, giản đồ này sử dụng lại trường releaseDate
vì trường đó có cùng ý nghĩa đối với 2 trường movieTitle
.
Trong quá trình 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ó 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 tuỳ chọn không phân biệt về loại
PropertyDefinition liệt kê các tuỳ chọn chức năng tìm kiếm chung áp dụng 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. Mọi thuộc tính phim trong ví dụ đề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 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ể được dùng để sắp xếp. Điều này không đúng với các thuộc tính có thể lặp lại. Ví dụ: kết quả phim có thể được sắp xếp 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ể được dùng để tạo facets. Khía cạ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, sau đó thêm tiêu chí hoặc thuộc tính để tinh chỉnh thêm các kết quả đó. Lựa chọn này không được đúng với các thuộc tính có loại là đối tượng vàisReturnable
phải có giá trị là true để đặ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 các mặt chogenre
,actorName
,userRating
vàmpaaRating
để tinh chỉnh tính tương tác của kết quả tìm kiếm.isWildcardSearchable
cho biết rằng người dùng có thể thực hiện thao tác tìm kiếm theo ký tự đại diện cho thuộc tính này. Tuỳ 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 bằng 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 đặtexactMatchWithOperator
thànhtrue
, thì giá trị văn bản sẽ được mã hoá thành một giá trị nguyên tử và một lượt tìm kiếm bằng 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ì một truy vấn ký tự đại diệnscience-*
sẽ so khớp với giá trị đó. Nếu bạn đặtexactMatchWithOperator
thànhfalse
, thì giá trị văn bản sẽ được mã hoá và tìm kiếm bằng 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à " Science-fiction", thì các truy vấn ký tự đại diệnsci*
hoặcfi*
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
để sử dụng.
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ả genre
và actorName
đề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 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 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 cho 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 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
sẽ cho biết tiêu đề phim thuộc loại văn bản. Đoạn mã sau đây cho thấy thuộc tính movieTitle
với textPropertyOptions
đặt loại dữ liệu.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
...
},
...
},
Mỗi tài sản chỉ có thể được liên kết với một loại dữ liệu. 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 phải cả hai.
Dưới đâ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:
Tài sản | Đố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 của bạn.
Trong tình huống tưởng tượng của giản đồ phim này, người dùng sẽ muốn sắp xếp kết quả theo trình tự thời gian, vì vậy releaseDate
là đối tượng ngày tháng.
Chẳng hạn, nếu có trường hợp sử dụng dự kiến là so sánh bản phát hành tháng 12 trong các năm với bản phát hành tháng 1, thì định dạng chuỗi có thể sẽ hữu ích.
Định cấu hình các tuỳ chọn theo từng loại
Phần tham khảo PropertyDefinition có liên kết đến các tuỳ chọn cho từng loại. Bạn không bắt buộc phải sử dụng hầu hết các tuỳ chọn dành riêng cho từng loại, 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 ứng với nhau. Đoạn mã sau đây cho thấy thuộc tính movieTitle
với textPropertyOptions
đặt kiểu dữ liệu và tuỳ chọn dành riêng cho từng loại retrievalImportance
.
{
"name": "movieTitle",
"isReturnable": true,
"isWildcardSearchable": true,
"textPropertyOptions": {
"retrievalImportance": { "importance": "HIGHEST" },
...
},
...
}
Dưới đây là các tuỳ chọn bổ sung dành riêng cho từng loại được dùng trong giản đồ mẫu:
Tài sản | Loại | Tuỳ chọn theo 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 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 operatorOptions
tuỳ chọn. Các tuỳ chọn này mô tả cách sử dụng thuộc tính làm toán tử tìm kiếm. Đoạn mã sau đây hiển thị 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 retrievalImportance
và operatorOptions
.
{
"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 của thuộc tính. 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 một cụm từ tìm kiếm. Ví dụ: để tìm kiếm phim dựa trên tên phim, người dùng sẽ nhập title:movieName
, trong đó movieName
là tên của một bộ phim.
Tên nhà vận hành không cần phải giống với tên của tài sản. 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 từ "name" (tên) thay vì "title" (tiêu đề) cho một 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 thành cùng một loại. Khi bạn dùng tên toán tử dùng chung trong một truy vấn, hệ thống sẽ truy xuất tất cả các thuộc tính sử dụng tên toán 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 này có một operatorName
là plot
. Miễn là cả hai thuộc tính này đều là văn bản (textPropertyOptions
), 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 thông tin so sánh với một giá trị được 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ỉ là 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 thuộc tính.
Ví dụ: hãy cân nhắc lập chỉ mục các đối tượng Sách hoặc Phim 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à "Hư cấu". Khi bạn bỏ qua hoặc đặt exactMatchWithOperator
thành false
, việc tìm kiếm một thể loại hoặc chọn thuộc tính "Khoa học" hoặc "Hư cấu" 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à "Hư cấu" tồn tại trong "Khoa học-Fiction".
Khi exactMatchWithOperator
là true
, văn bản sẽ được coi là một mã thông báo duy nhất, do đó, " Science" và "Fiction" đều không khớp với " Science-Fiction".
(Không bắt buộc) Thêm phần displayOptions
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 nên dùng, thân thiện với người dùng 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, 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ỉ có giá trị thuộc tính được hiển thị.
Đoạn mã sau đây cho thấy thuộc tính movieTitle
có displayLabel
đượ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[]
Bất kỳ phần propertyDefinition
nào cũng có một phần suggestionFilteringOperators[]
(không bắt buộc). 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 ưa thích 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 mà họ ưu tiên mới xuất hiện trong phần đề 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 phải có mã nguồn dữ liệu mà bạn đã nhận được trong bước Khởi chạy một nguồn dữ liệu.
Sử dụng mã 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 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ó các thông tin sau:
{ "validateOnly": // true or false, "schema": { // ... Your complete schema object ... } }
Sử dụng tuỳ chọn validateOnly
để kiểm thử 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
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. Lập chỉ mục thường được thực hiện trong trình kết nối nội dung của bạn.
Khi sử dụng giản đồ phim, yêu cầu lập chỉ mục API REST 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"
}
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 2 giá trị này, Cloud Search sẽ 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, 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ụ của year
, month
và day
mà thuộc tính kế thừa, vì thuộc tính này được định nghĩa 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 này.
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 trê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 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 đề tiềm ẩn khi lập chỉ mục
Hai vấn đề phổ biến nhất liên quan đến giản đồ và 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 sẽ 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 thử 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ử với một kho lưu trữ dữ liệu kiểm thử có kích thước 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 chính thức 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 một 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ả của 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ử 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 dựa trên nguồn dữ liệu phim bằng cách nhập từ "titanic" rồi nhấn phím 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 một toán tử
Việc thêm toán tử vào truy vấn 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ể sử dụng toán tử actor
để tìm tất cả 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 đơn giản bằng cách nhập cặp operator=value, chẳng hạn như "actor:Zane" rồi nhấn Return. Tất cả phim có Zane đóng vai trò là diễn viên phải đượ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 gì đang hoạt động 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 chưa được lập chỉ mục trước đó. Ví dụ: người dùng có thể tìm kiếm phim nhiều lần 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 với tư cách là một 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ử 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, thì bạn có thể cân nhắc việc đổi tên toán tử.
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 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 là số nguyên.
- Thứ hạng theo thứ tự số nguyên và enum.
- Tùy chọn về độ mới.
- Tùy chọn hiển thị.
Đối với những 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 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ặcisSortable
từfalse
thànhtrue
.
Bạn nên đặt isFacetable
hoặc isSortable
thành true
chỉ nếu có nhu cầu và trường hợp sử dụng 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 là isSuggestable
, bạn phải lập chỉ mục lại dữ liệu của mình. Điều này khiến việc sử dụng tính năng tự động hoàn thành đối với thuộc tính đó bị chậm trễ.
Thay đổi thuộc tính không được phép
Bạn không được phép thực hiện một số thay đổi đối với giản đồ, ngay cả khi lập chỉ mục lại dữ liệu, vì các thay đổi này sẽ làm hỏng chỉ mục hoặc dẫn đến kết quả tìm kiếm kém chất lượng hoặc không nhất quán. Có thể kể đến một số thay đổi đối với:
- 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ó cách khắc phục hạn chế này.
Thay đổi giản đồ phức tạp
Để tránh các 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 một số loại thay đổi nhất định trong 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 các thuộc tính đó. Những thay đổi này không thể thực hiện được 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 đồ, bạn thường có thể thực hiện một loạt thay đổi được phép để đạt được hiệu quả tương tự. Nhìn chung, quá trình này bao gồm việc di chuyển các thuộc tính được lập chỉ mục trước tiên từ định nghĩa đối tượng cũ sang định nghĩa đối tượng 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 của một tài sản:
- Thêm một thuộc tính mới vào phần định nghĩa đối tượng trong giản đồ. Hãy sử dụng một tên khác với thuộc tính mà 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à cũ, trong yêu cầu.
Bổ sung chỉ mục từ kho lưu trữ dữ liệu. Để thay thế chỉ mục, hãy gửi tất cả yêu cầu lập chỉ mục bằng thuộc tính mới chứ không phải thuộc tính cũ, vì điều này sẽ dẫn đến việc tính hai lần kết quả truy vấn.
- Trong quá trình lập chỉ mục thay thế, hãy kiểm tra tài sản mới và đặt mặc định về tài sản cũ để tránh hành vi không nhất quán.
- Sau khi quá trình chèn lấp hoàn tất, hãy chạy truy vấn kiểm tra để xác minh.
Xoá tài sản cũ. Hãy gửi một yêu cầu UpdateSchema khác mà không dùng 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 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ừ tác giả thành tác giả, bạn phải cập nhật mã truy vấn để sử dụng tác giả tại vị trí tác giả đã tham chiếu đến trước đó.
Cloud Search lưu giữ bản ghi của mọi thuộc tính hoặc đối tượng đã xoá trong 30 ngày để ngăn chặn mọi việc sử dụng lại có thể dẫn đến 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 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 này bạn quyết định khôi phục thuộc tính hoặc đối tượng đó, thì bạn có thể làm như vậy 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 các đối tượng và giản đồ 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 tối đa là 10 đối tượng.
- Độ 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 ở mức 1.000, bao gồm số 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
Dưới đâ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 đồ.
Điều chỉnh giả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 cụm từ 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.Tạo trình kết nối.