Trình kết nối nội dung là một chương trình phần mềm duyệt qua dữ liệu trong kho lưu trữ của doanh nghiệp và điền sẵn một nguồn dữ liệu. Google cung cấp các lựa chọn sau đây để phát triển trình kết nối nội dung:
Content Connector SDK. Đây là một lựa chọn phù hợp cho các lập trình viên Java. SDK là một trình bao bọc xung quanh REST API, cho phép bạn nhanh chóng tạo trình kết nối. Để tạo một trình kết nối nội dung bằng SDK, hãy xem phần Tạo trình kết nối nội dung bằng Content Connector SDK.
Một API REST cấp thấp hoặc các thư viện API. Hãy sử dụng các lựa chọn này nếu bạn không dùng Java hoặc nếu cơ sở mã của bạn phù hợp hơn với một REST API hoặc một thư viện. Để tạo một trình kết nối nội dung bằng REST API, hãy xem phần Tạo trình kết nối nội dung bằng REST API.
Một trình kết nối nội dung thông thường sẽ thực hiện các tác vụ sau:
- Đọc và xử lý các thông số cấu hình.
- Kéo các khối dữ liệu rời rạc có thể lập chỉ mục (gọi là "mục") từ kho lưu trữ bên thứ ba.
- Kết hợp ACL, siêu dữ liệu và dữ liệu nội dung thành các mục có thể lập chỉ mục.
- Lập chỉ mục các mục vào nguồn dữ liệu Cloud Search.
- (Không bắt buộc) Nghe các thông báo thay đổi từ kho lưu trữ. Thông báo thay đổi sẽ chuyển thành yêu cầu lập chỉ mục để giữ cho nguồn dữ liệu Cloud Search luôn đồng bộ. Trình kết nối chỉ thực hiện tác vụ này nếu kho lưu trữ hỗ trợ tính năng phát hiện thay đổi.
Tạo trình kết nối nội dung bằng Content Connector SDK
Các phần sau đây giải thích cách tạo một trình kết nối nội dung bằng Content Connector SDK.
Thiết lập phần phụ thuộc
Đưa các phần phụ thuộc này vào tệp bản dựng.
Maven
xml
<dependency>
<groupId>com.google.enterprise.cloudsearch</groupId>
<artifactId>google-cloudsearch-indexing-connector-sdk</artifactId>
<version>v1-0.0.3</version>
</dependency>
Gradle
groovy
compile group: 'com.google.enterprise.cloudsearch',
name: 'google-cloudsearch-indexing-connector-sdk',
version: 'v1-0.0.3'
Tạo cấu hình trình kết nối
Mỗi trình kết nối đều sử dụng một tệp cấu hình cho các tham số như mã nhận dạng kho lưu trữ.
Xác định các tham số dưới dạng các cặp khoá-giá trị, chẳng hạn như api.sourceId=1234567890abcdef.
SDK Google Cloud Search bao gồm các tham số do Google cung cấp cho tất cả các trình kết nối. Bạn phải khai báo những nội dung sau trong tệp cấu hình:
- Trình kết nối nội dung: Khai báo
api.sourceIdvàapi.serviceAccountPrivateKeyFile. Các khoá này xác định kho lưu trữ của bạn và khoá riêng tư cần thiết để truy cập.
- Trình kết nối danh tính: Khai báo
api.identitySourceIdđể xác định nguồn danh tính bên ngoài của bạn. Đối với việc đồng bộ hoá người dùng, hãy khai báo cảapi.customerId(mã nhận dạng duy nhất cho tài khoản Google Workspace của bạn).
Chỉ khai báo các thông số khác do Google cung cấp để ghi đè giá trị mặc định của chúng. Để biết thông tin chi tiết về cách tạo mã nhận dạng và khoá, hãy xem phần Các tham số do Google cung cấp.
Bạn cũng có thể xác định các tham số dành riêng cho kho lưu trữ trong tệp cấu hình.
Truyền tệp cấu hình đến trình kết nối
Đặt thuộc tính hệ thống config để truyền tệp cấu hình. Sử dụng đối số -D khi khởi động trình kết nối. Ví dụ:
java -classpath myconnector.jar -Dconfig=MyConfig.properties MyConnector
Nếu bạn bỏ qua đối số này, SDK sẽ cố gắng sử dụng một tệp có tên là connector-config.properties trong thư mục cục bộ.
Xác định chiến lược duyệt qua
Chức năng chính của một trình kết nối nội dung là duyệt qua một kho lưu trữ và lập chỉ mục dữ liệu của kho lưu trữ đó. Bạn phải triển khai một chiến lược dựa trên kích thước và bố cục của kho lưu trữ. Bạn có thể tự thiết kế hoặc chọn một chiến lược trong SDK:
- Chiến lược duyệt qua toàn bộ
- Quét toàn bộ kho lưu trữ và lập chỉ mục cho từng mục. Chiến lược này phù hợp nhất với các kho lưu trữ nhỏ, nơi bạn có thể chịu được chi phí chung của một lần duyệt qua toàn bộ trong mỗi lần lập chỉ mục. Hãy dùng tính năng này cho các kho lưu trữ nhỏ có dữ liệu chủ yếu là tĩnh, không phân cấp hoặc khi khó phát hiện thay đổi.
- Chiến lược duyệt qua danh sách
- Quét toàn bộ kho lưu trữ để xác định trạng thái của từng mục, sau đó chỉ lập chỉ mục các mục mới hoặc mục đã cập nhật. Sử dụng phương thức này để cập nhật gia tăng cho một chỉ mục lớn, không theo hệ phân cấp khi không hỗ trợ tính năng phát hiện thay đổi.
- Truy cập vào biểu đồ
- Quét một nút mẹ để xác định trạng thái của các mục trong nút đó, sau đó lập chỉ mục các mục mới hoặc đã cập nhật trong nút đó. Sau đó, nó sẽ xử lý các nút con một cách đệ quy. Sử dụng mã này cho các kho lưu trữ phân cấp mà việc liệt kê tất cả mã nhận dạng là không thực tế, chẳng hạn như cấu trúc thư mục hoặc trang web.
SDK triển khai các chiến lược này trong các lớp trình kết nối mẫu. Những mẫu này có thể giúp bạn đẩy nhanh quá trình phát triển. Để sử dụng mẫu, hãy xem phần tương ứng:
- Tạo trình kết nối truyền tải đầy đủ bằng lớp mẫu
- Tạo trình kết nối duyệt qua danh sách bằng cách sử dụng một lớp mẫu
- Tạo trình kết nối truyền tải đồ thị bằng lớp mẫu
Tạo trình kết nối truyền tải đầy đủ bằng lớp mẫu
Phần này đề cập đến mã từ FullTraversalSample.
Triển khai điểm truy cập của trình kết nối
Điểm truy cập là phương thức main(). Thao tác này sẽ tạo một phiên bản Application và gọi start() để chạy trình kết nối.
Trước khi gọi application.start(), hãy dùng lớp IndexingApplication.Builder để khởi tạo mẫu FullTraversalConnector. Mẫu này chấp nhận một đối tượng Repository.
SDK gọi initConfig() sau khi phương thức main() của bạn gọi Application.build(). Phương thức initConfig():
- Đảm bảo rằng
Configurationchưa được khởi chạy. - Khởi chạy đối tượng
Configurationbằng các cặp khoá-giá trị do Google cung cấp.
Triển khai giao diện Kho lưu trữ
Đối tượng Repository duyệt qua và lập chỉ mục các mục trong kho lưu trữ. Khi sử dụng một mẫu, bạn chỉ cần ghi đè một số phương thức trong giao diện Repository. Đối với FullTraversalConnector, hãy ghi đè:
init(): Để thiết lập và khởi chạy kho lưu trữ.getAllDocs(): Để duyệt qua và lập chỉ mục tất cả các mục. Phương thức này được gọi một lần cho mỗi lần truyền tải theo lịch.- (Không bắt buộc)
getChanges(): Nếu kho lưu trữ của bạn hỗ trợ tính năng phát hiện thay đổi, hãy ghi đè tính năng này để truy xuất và lập chỉ mục các mục đã sửa đổi. - (Không bắt buộc)
close(): Để dọn dẹp kho lưu trữ trong quá trình tắt.
Mỗi phương thức trả về một đối tượng ApiOperation. Đối tượng này thực hiện lập chỉ mục bằng cách sử dụng IndexingService.indexItem().
Nhận các tham số cấu hình tuỳ chỉnh
Để xử lý cấu hình của trình kết nối, bạn phải truy xuất mọi thông số tuỳ chỉnh từ đối tượng Configuration. Hãy thực hiện nhiệm vụ này trong phương thức init() của lớp Repository.
Lớp Configuration bao gồm các phương thức để truy xuất nhiều loại dữ liệu.
Mỗi phương thức trả về một đối tượng ConfigValue. Sử dụng phương thức get() của đối tượng ConfigValue để truy xuất giá trị. Đoạn mã này trong FullTraversalSample cho biết cách truy xuất một giá trị số nguyên tuỳ chỉnh:
Để truy xuất và phân tích cú pháp các tham số có nhiều giá trị, hãy sử dụng một trong các trình phân tích cú pháp kiểu của lớp Configuration. Đoạn mã này trong trình kết nối hướng dẫn sử dụng getMultiValue để truy xuất danh sách tên kho lưu trữ GitHub:
Thực hiện một lượt truy cập đầy đủ
Ghi đè getAllDocs() để thực hiện một lượt truyền tải đầy đủ. Phương thức này chấp nhận một điểm kiểm tra để tiếp tục lập chỉ mục nếu bị gián đoạn. Đối với từng mục:
- Thiết lập các quyền.
- Đặt siêu dữ liệu.
- Kết hợp các ảnh đó thành một
RepositoryDoc. - Đóng gói từng mục vào trình lặp được trả về theo
getAllDocs().
Nếu tập hợp mục quá lớn cho một lệnh gọi, hãy sử dụng một điểm kiểm tra và gọi hasMore(true).
Đặt quyền cho một mục
Kho lưu trữ sử dụng Danh sách kiểm soát truy cập (ACL) để xác định người dùng hoặc nhóm có quyền truy cập vào một mục. ACL liệt kê mã nhận dạng của những người dùng hoặc nhóm được uỷ quyền.
Để đảm bảo người dùng chỉ thấy những kết quả tìm kiếm mà họ được phép truy cập, bạn phải sao chép các ACL của kho lưu trữ. Đưa ACL vào khi lập chỉ mục một mục để Google Cloud Search có thể cung cấp cấp độ truy cập chính xác.
Content Connector SDK bao gồm các lớp và phương thức để mô hình hoá ACL của hầu hết các kho lưu trữ. Phân tích ACL của kho lưu trữ và tạo ACL tương ứng cho Cloud Search trong quá trình lập chỉ mục. Việc lập mô hình ACL phức tạp (chẳng hạn như những ACL sử dụng tính kế thừa) đòi hỏi bạn phải lập kế hoạch cẩn thận. Để biết thêm thông tin, hãy xem bài viết ACL của Cloud Search.
Sử dụng lớp Acl.Builder để đặt quyền truy cập. Đoạn mã này trong mẫu duyệt qua đầy đủ cho phép tất cả người dùng miền (getCustomerPrincipal()) đọc tất cả các mục (setReaders()):
Việc mô hình hoá đúng ACL kho lưu trữ, đặc biệt là những ACL sử dụng mô hình kế thừa, đòi hỏi phải có thông tin trong ACL Cloud Search.
Đặt siêu dữ liệu cho một mục
Siêu dữ liệu được lưu trữ trong đối tượng Item. Để tạo một Item, bạn cần có một mã nhận dạng, loại mặt hàng, ACL, URL và phiên bản riêng biệt. Sử dụng lớp trợ giúp IndexingItemBuilder.
Tạo mục có thể lập chỉ mục
Dùng lớp RepositoryDoc.Builder.
RepositoryDoc là một ApiOperation thực hiện yêu cầu IndexingService.indexItem().
Sử dụng phương thức setRequestMode() của lớp RepositoryDoc.Builder để đặt yêu cầu lập chỉ mục thành ASYNCHRONOUS hoặc SYNCHRONOUS:
ASYNCHRONOUS- Chế độ này có độ trễ từ lập chỉ mục đến phân phát lâu hơn nhưng có hạn ngạch thông lượng lớn hơn. Sử dụng chế độ không đồng bộ để lập chỉ mục ban đầu (điền lại) toàn bộ kho lưu trữ.
SYNCHRONOUS- Chế độ này có độ trễ từ lập chỉ mục đến phân phát ngắn hơn nhưng hạn ngạch thông lượng nhỏ hơn. Sử dụng chế độ đồng bộ để lập chỉ mục các bản cập nhật và thay đổi trong kho lưu trữ. Chế độ yêu cầu mặc định là
SYNCHRONOUSnếu bạn không chỉ định.
Đóng gói từng mục có thể lập chỉ mục trong một trình lặp
Phương thức getAllDocs() trả về một CheckpointCloseableIterable của các đối tượng RepositoryDoc. Dùng lớp CheckpointCloseableIterableImpl.Builder.
Các bước tiếp theo
- (Không bắt buộc) Nếu tốc độ lập chỉ mục chậm, hãy xem phần Tăng tốc độ lập chỉ mục.
- (Không bắt buộc) Triển khai
close()để giải phóng tài nguyên. - (Không bắt buộc) Tạo một trình kết nối danh tính.
Tạo trình kết nối truyền tải danh sách bằng lớp mẫu
Hàng đợi lập chỉ mục Cloud Search lưu giữ các mã nhận dạng và hàm băm không bắt buộc cho các mục trong kho lưu trữ. Trình kết nối duyệt qua danh sách sẽ đẩy mã nhận dạng vào hàng đợi này và truy xuất mã nhận dạng đó để lập chỉ mục. Cloud Search duy trì các hàng đợi này để xác định trạng thái của mục, chẳng hạn như việc xoá. Xem phần Hàng đợi lập chỉ mục của Cloud Search.
Phần này đề cập đến ListTraversalSample.
Triển khai điểm truy cập của trình kết nối
Phương thức main() tạo một thực thể Application và gọi start(). Sử dụng IndexingApplication.Builder để tạo thực thể cho mẫu ListingConnector.
Triển khai giao diện Kho lưu trữ
Ghi đè các phương thức sau cho ListingConnector:
init(): Để thiết lập kho lưu trữ.getIds(): Để truy xuất mã nhận dạng và hàm băm cho tất cả bản ghi.getDoc(): Để thêm, cập nhật hoặc xoá các mục khỏi chỉ mục.- (Không bắt buộc)
getChanges(): Để cập nhật gia tăng bằng tính năng phát hiện thay đổi. - (Không bắt buộc)
close(): Để dọn dẹp kho lưu trữ.
Thực hiện việc duyệt qua danh sách
Ghi đè getIds() để truy xuất mã nhận dạng và hàm băm. Ghi đè getDoc() để xử lý từng mục trong Hàng đợi lập chỉ mục Cloud Search.
Đẩy mã mặt hàng và giá trị băm
Ghi đè getIds() để tìm nạp mã nhận dạng và hàm băm nội dung. Đóng gói các yêu cầu này vào một yêu cầu PushItems đối với Hàng đợi lập chỉ mục.
Sử dụng PushItems.Builder để đóng gói các mã nhận dạng và hàm băm.
Truy xuất và xử lý từng mục
Ghi đè getDoc() để xử lý các mục trong Hàng đợi lập chỉ mục. Các mục có thể là mới, đã được sửa đổi, không thay đổi hoặc đã bị xoá.
- Kiểm tra xem mã mặt hàng có tồn tại trong kho lưu trữ hay không. Nếu không, hãy xoá tệp đó.
- Thăm dò chỉ mục để biết trạng thái. Nếu không thay đổi (
ACCEPTED), hãy bỏ qua. - Lập chỉ mục các mục đã thay đổi hoặc mục mới: đặt quyền, đặt siêu dữ liệu, kết hợp thành một
RepositoryDocvà trả về.
Xử lý các mục đã xoá
Đoạn mã này cho biết cách xác định xem một mục có tồn tại hay không và xoá mục đó nếu không tồn tại.
Xử lý các mục không thay đổi
Lấy dữ liệu từ Hàng đợi lập chỉ mục để xử lý các mục không thay đổi.
Ví dụ này sử dụng hàm băm để phát hiện các thay đổi.
Đặt quyền cho một mục
Kho lưu trữ sử dụng Danh sách kiểm soát truy cập (ACL) để xác định người dùng hoặc nhóm có quyền truy cập vào một mục. ACL liệt kê mã nhận dạng của những người dùng hoặc nhóm được uỷ quyền.
Để đảm bảo người dùng chỉ thấy những kết quả tìm kiếm mà họ được phép truy cập, bạn phải sao chép các ACL của kho lưu trữ. Đưa ACL vào khi lập chỉ mục một mục để Google Cloud Search có thể cung cấp cấp độ truy cập chính xác.
Content Connector SDK bao gồm các lớp và phương thức để mô hình hoá ACL của hầu hết các kho lưu trữ. Phân tích ACL của kho lưu trữ và tạo ACL tương ứng cho Cloud Search trong quá trình lập chỉ mục. Việc lập mô hình ACL phức tạp (chẳng hạn như những ACL sử dụng tính kế thừa) đòi hỏi bạn phải lập kế hoạch cẩn thận. Để biết thêm thông tin, hãy xem bài viết ACL của Cloud Search.
Sử dụng lớp Acl.Builder để đặt quyền truy cập. Đoạn mã này trong mẫu duyệt qua đầy đủ cho phép tất cả người dùng miền (getCustomerPrincipal()) đọc tất cả các mục (setReaders()):
Việc mô hình hoá đúng ACL kho lưu trữ, đặc biệt là những ACL sử dụng mô hình kế thừa, đòi hỏi phải có thông tin trong ACL Cloud Search.
Đặt siêu dữ liệu cho một mục
Tạo một mục có thể lập chỉ mục
Sử dụng phương thức setRequestMode() của lớp RepositoryDoc.Builder để đặt yêu cầu lập chỉ mục thành ASYNCHRONOUS hoặc SYNCHRONOUS:
ASYNCHRONOUS- Chế độ này có độ trễ từ lập chỉ mục đến phân phát lâu hơn nhưng có hạn ngạch thông lượng lớn hơn. Sử dụng chế độ không đồng bộ để lập chỉ mục ban đầu (điền lại) toàn bộ kho lưu trữ.
SYNCHRONOUS- Chế độ này có độ trễ từ lập chỉ mục đến phân phát ngắn hơn nhưng hạn ngạch thông lượng nhỏ hơn. Sử dụng chế độ đồng bộ để lập chỉ mục các bản cập nhật và thay đổi trong kho lưu trữ. Chế độ yêu cầu mặc định là
SYNCHRONOUSnếu bạn không chỉ định.
Các bước tiếp theo
Sau đây là một số bước tiếp theo mà bạn có thể thực hiện:
- (không bắt buộc) Triển khai phương thức
close()để giải phóng mọi tài nguyên trước khi tắt. - (không bắt buộc) Tạo một trình kết nối danh tính bằng Content Connector SDK.
Tạo trình kết nối truyền tải đồ thị bằng lớp mẫu
Hàng đợi lập chỉ mục của Cloud Search lưu giữ mã nhận dạng và các giá trị băm không bắt buộc cho từng mục trong kho lưu trữ. Trình kết nối truyền tải đồ thị sẽ đẩy mã nhận dạng mục vào Hàng đợi lập chỉ mục của Google Cloud Search và truy xuất từng mã nhận dạng một để lập chỉ mục. Google Cloud Search duy trì các hàng đợi và so sánh nội dung của hàng đợi để xác định trạng thái của mục, chẳng hạn như liệu một mục đã bị xoá khỏi kho lưu trữ hay chưa. Để biết thêm thông tin về Hàng đợi lập chỉ mục của Cloud Search, hãy xem phần Hàng đợi lập chỉ mục của Google Cloud Search.
Trong quá trình lập chỉ mục, nội dung của mục sẽ được tìm nạp từ kho dữ liệu và mọi mã nhận dạng mục con sẽ được đẩy vào hàng đợi. Trình kết nối sẽ xử lý mã nhận dạng mẹ và mã nhận dạng con một cách đệ quy cho đến khi tất cả các mục được xử lý.
Triển khai điểm truy cập của trình kết nối
Điểm truy cập vào một trình kết nối là phương thức main(). Phương thức này tạo một phiên bản của lớp Application và gọi phương thức start() để chạy trình kết nối.
Trước khi gọi application.start(), hãy dùng lớp IndexingApplication.Builder để tạo thực thể cho mẫu ListingConnector. ListingConnector chấp nhận một đối tượng Repository mà bạn triển khai các phương thức.
Triển khai giao diện Kho lưu trữ
Ghi đè init(), getIds(), getDoc() và không bắt buộc getChanges() hoặc close().
Thực hiện việc duyệt đồ thị
Ghi đè getIds() để truy xuất các mã nhận dạng ban đầu và getDoc() để xử lý các mục và đẩy mã nhận dạng con vào hàng đợi.
Đẩy mã mặt hàng và giá trị băm
Truy xuất và xử lý từng mục
- Kiểm tra xem mã nhận dạng có trong kho lưu trữ hay không. Nếu không, hãy xoá mục đó.
- Đối với các mục hiện có, hãy đặt quyền và siêu dữ liệu, rồi kết hợp chúng thành một
RepositoryDoc. - Đẩy mã nhận dạng con vào Hàng đợi lập chỉ mục.
- Trả về
RepositoryDoc.
Xử lý các mục đã xoá
Đặt siêu dữ liệu và tạo mục
Đặt mã nhận dạng con vào Hàng đợi lập chỉ mục
Tạo trình kết nối nội dung bằng REST API
Các phần sau đây giải thích cách tạo một trình kết nối nội dung bằng REST API.
Xác định chiến lược duyệt qua
Về mặt khái niệm, các chiến lược (Đầy đủ, Danh sách và Đồ thị) cũng giống như đối với SDK. Triển khai chiến lược bạn chọn bằng cách sử dụng REST API.
Triển khai chiến lược duyệt qua và lập chỉ mục các mục
Đăng ký giản đồ của bạn, sau đó điền vào chỉ mục bằng cách sử dụng:
- (Không bắt buộc)
items.uploadđối với các tệp lớn hơn 100 KiB. - (Không bắt buộc)
media.uploadđối với tệp nội dung nghe nhìn. items.indexđể lập chỉ mục cho mặt hàng.Ví dụ về yêu cầu lập chỉ mục:
{ "name": "datasource/<data_source_id>/items/titanic", "acl": { "readers": [ { "gsuitePrincipal": { "gsuiteDomain": true } } ] }, "metadata": { "title": "Titanic", "viewUrl": "http://www.imdb.com/title/tt2234155/", "objectType": "movie" }, "structuredData": { "object": { "properties": [ { "name": "movieTitle", "textValues": { "values": ["Titanic"] } } ] } }, "content": { "inlineContent": "A seventeen-year-old aristocrat falls in love...", "contentFormat": "TEXT" }, "version": "01", "itemType": "CONTENT_ITEM" }(Không bắt buộc) Sử dụng
items.getđể xác minh việc lập chỉ mục.
Xử lý các thay đổi về kho lưu trữ
Định kỳ lập chỉ mục lại toàn bộ kho lưu trữ để lập chỉ mục đầy đủ. Đối với việc duyệt qua danh sách hoặc biểu đồ, hãy dùng Hàng đợi lập chỉ mục của Google Cloud để theo dõi các thay đổi và chỉ lập chỉ mục những nội dung đã thay đổi. Sử dụng items.push để thêm các mục vào danh sách chờ.