警告:Cloud Search 參考連接器是依「現狀」提供做為範例程式碼 建立專屬於您的工作連接器這段程式碼規定 進行重要自訂和測試後,再用於概念驗證 實際工作環境針對實際工作環境,強烈建議您取得相關協助 。想進一步協助您尋找合適的雲端 搜尋夥伴,請與您的 Google 客戶經理聯絡。 |
您可以設定 Google Cloud Search 探索貴機構的資料,並建立索引 與 Google Cloud Search 資料庫連結
重要事項
您幾乎能在所有可以執行 Java 應用程式的環境中,安裝及執行 Cloud Search 資料庫連接器,只要連接器能夠存取 網際網路和資料庫
系統需求
系統需求 | |
---|---|
作業系統 | Windows 或 Linux |
SQL 資料庫 | 使用符合 JDBC 4.0 以上驅動程式且符合 JDBC 4.0 以上驅動程式的 SQL 資料庫,包括:
|
軟體 | 供連接器用來存取資料庫的 JDBC 驅動程式 (需另外下載和安裝) |
部署連接器
下列步驟說明如何安裝及設定連接器 建立指定資料庫的索引,並將結果傳回 Cloud Search 使用者。
必要條件
部署 Cloud Search 資料庫連接器之前,請收集以下資訊:
- Google Workspace 私密金鑰,包含服務帳戶 ID。如要瞭解如何取得私密金鑰,請前往 設定 Google Cloud 的存取權 搜尋 REST API。
- Google Workspace 資料來源 ID。如要瞭解如何取得資料來源 ID,請參閱 在 Cloud Search 中新增資料來源。
步驟 1:下載並建立資料庫連接器軟體
- 從 GitHub 複製連接器存放區。
$ git clone https://github.com/google-cloudsearch/database-connector.git $ cd database-connector
- 查看所需版本的連接器:
$ git checkout tags/v1-0.0.3
- 建構連接器。
$ mvn package
如要在建構連接器時略過測試,請使用mvn package -DskipTests
。 - 將連接器 ZIP 檔案複製到本機安裝目錄,然後解壓縮:
$ cp target/google-cloudsearch-database-connector-v1-0.0.3.zip installation-dir $ cd installation-dir $ unzip google-cloudsearch-database-connector-v1-0.0.3.zip $ cd google-cloudsearch-database-connector-v1-0.0.3
步驟 2:設定資料庫連接器
- 建立文字檔案,並將其命名為
connector-config.properties
(預設) 或類似名稱。Google 推薦 請使用.properties
為設定檔命名 或.config
副檔名,將檔案存放在與連接器相同的目錄中。 如果您使用其他名稱或路徑,必須在執行連接器時指定路徑。 - 將參數做為鍵/值組合新增至檔案內容。設定檔必須指定
資料來源存取的參數、資料庫存取參數、資料庫完整週遊 SQL 陳述式
內容欄位標題和欄定義您也可以設定其他連接器行為
搭配自選參數例如:
# Required parameters for data source access api.sourceId=1234567890abcdef api.identitySourceId=0987654321lmnopq api.serviceAccountPrivateKeyFile=./PrivateKey.json # # Required parameters for database access db.url=jdbc:mysql://localhost:3306/mysql_test db.user=root db.password=passw0rd # # Required full traversal SQL statement parameter db.allRecordsSql=select customer_id, first_name, last_name, phone, change_timestamp from address_book # # Required parameters for column definitions and URL format db.allColumns=customer_id, first_name, last_name, phone, change_timestamp db.uniqueKeyColumns=customer_id url.columns=customer_id # # Required content field parameter contentTemplate.db.title=customer_id # # Optional parameters to set ACLs to "entire domain" access defaultAcl.mode=fallback defaultAcl.public=true # # Optional parameters for schedule traversals schedule.traversalIntervalSecs=36000 schedule.performTraversalOnStart=true schedule.incrementalTraversalIntervalSecs=3600
瞭解所有 Cloud Search 通用的參數 連接器 (例如中繼資料設定、日期時間格式和 ACL 選項),請前往 Google 提供的連接器參數
視情況指定遍歷 SQL 中結構定義物件的屬性 查詢參數。通常您可以為 SQL 新增別名 聲明。比方說 資料庫,而資料來源結構定義包含名為 SQL 陳述式格式為「ActorName」:
SELECT …, last_name AS ActorName, … FROM …
。
步驟 3:執行資料庫連接器
以下範例假設必要元件位於 位於 Linux 系統上的目錄
如要透過指令列執行連接器,請輸入下列指令:
java \ -cp "google-cloudsearch-database-connector-v1-0.0.3.jar:mysql-connector-java-5.1.41-bin.jar" \ com.google.enterprise.cloudsearch.database.DatabaseFullTraversalConnector \ [-Dconfig=mysql.config]
在此情況下:
google-cloud-search-database-connector-v1-0.0.3.jar
是 資料庫連接器 .jar 檔案mysql-connector-java-5.1.41-bin.jar
是目前使用的 JDBC 驅動程式 存取資料庫mysql.config
是自訂命名的設定檔。為了確保連接器能辨識 設定檔,請在指令列中指定路徑。否則,連接器會使用 當地有connector-config.properties
設為預設檔案名稱
連接器偵測到設定錯誤時就會回報。如果發生以下情況,系統就會回報部分錯誤
連接器會初始化,例如當記錄內容定義了資料庫欄時
(位於 db.allColumns
),但該資料欄不會用於
資料庫 (位於 db.allRecordsSql
中)。只有在發生以下情況時,系統才會偵測並回報其他錯誤:
連接器會嘗試存取資料庫以進行第一次週遊,例如無效的 SQL 陳述式語法。
設定參數參考資料
資料來源存取參數
設定 | 參數 |
---|---|
資料來源 ID | api.sourceId = source-ID
必要欄位。Cloud Search Google Workspace 管理員設定的來源 ID。 |
識別資訊來源 ID | api.identitySourceId = identity-source-ID
必須啟用 ACL,才能將外部使用者和群組用於 ACL。Cloud Search 識別資訊來源 ID。 |
服務帳戶 | api.serviceAccountPrivateKeyFile = path-to-private-key
必要欄位。Cloud Search 路徑 Google Workspace 管理員建立的服務帳戶金鑰檔案。 |
資料庫存取參數
設定 | 參數 |
---|---|
資料庫網址 | db.url = database-URL
必要欄位。
要存取的資料庫完整路徑,例如 |
資料庫使用者名稱和密碼 | db.user = username db.password = password
必要欄位。有效的使用者名稱和 連接器存取資料庫時所用的密碼。這位資料庫使用者必須 具備讀取中資料庫相關記錄的讀取權限。 |
JDBC 驅動程式 | db.driverClass = oracle.jdbc.OracleDriver
只有在類別路徑未指定 JDBC 4.0 驅動程式時,才需要使用這個屬性。 |
遍歷 SQL 查詢參數
連接器會使用 SQL SELECT 週遊資料庫記錄 查詢設定檔您必須設定完整的遍歷查詢;查詢 漸進式週遊是選用功能
「完整週遊」會讀取設定建立索引的所有資料庫記錄。滿載 必須執行週遊程序,才能為 Cloud Search 建立新記錄並重新建立索引 。
「漸進式週遊」只會讀取新修改的資料庫,以及重新建立索引 和最近的項目寫入資料庫漸進式週遊發現的效率比 完整的周遊。如要使用漸進式週遊功能,資料庫必須包含時間戳記欄位 以表示修改的記錄。
設定 | 參數 |
---|---|
完整遍歷查詢 | db.allRecordsSql = SELECT column-1[, column-2,...] FROM database-name
必要欄位。會針對每個完整週遊執行查詢。 連接器會在 資源 (內容、專屬 ID、ACL) 都必須存在於這項查詢中。 連接器會在啟動時執行初步驗證以偵測錯誤 和疏忽因此,請勿使用一般的「SELECT * FROM ...」 。 |
完整週遊分頁 | db.allRecordsSql.pagination = {none | offset}
可能的值包括:
|
漸進式週遊查詢 | db.incrementalUpdateSql = SELECT column-1[, column-2,...] FROM database-name WHERE last_update_time > ?
如果您安排漸進式週遊時間,就必須進行這項設定。 「?」查詢中為時間戳記值的必要預留位置。 連接器會使用時間戳記來追蹤漸進式 SQL 查詢之間的修改。 如要追蹤上次更新時間的資料庫時間戳記欄,請將
SQL 陳述式的 如果是第一次漸進式週遊,連接器會使用連接器的開始時間。在 Cloud Search 會儲存時間戳記, 重新啟動連接器,即可存取先前的漸進式週遊 時間戳記。 |
資料庫時區 | db.timestamp.timezone = America/Los_Angeles
指定資料庫時間戳記所用的時區。資料庫時間戳記,用於識別新增或新記錄 資料庫記錄。預設值為連接器執行所在的當地時區。 |
週遊 SQL 查詢範例
- 基本的完整週遊查詢,會讀取員工資料庫中的每筆所需記錄,以便建立索引:
db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \ FROM employee
- 根據偏移值指定分頁,並將整個週遊拆分為多項查詢。
適用於 SQL Server 2012 或 Oracle 12c (標準 SQL 2008 語法):
db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \ FROM employee \ ORDER BY customer_id OFFSET ? ROWS FETCH FIRST 1000 ROWS ONLY db.allRecordsSql.pagination = offset
或者,如為 MySQL 或 Google Cloud SQL:
db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field \ FROM employee \ ORDER BY customer_id LIMIT 1000 OFFSET ? db.allRecordsSql.pagination = offset
- 完整遍歷查詢,套用具有別名的個別 ACL:
db.allRecordsSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, last_update_time, \ permitted_readers AS readers_users, \ denied_readers AS denied_users, \ permitted_groups AS readers_groups, \ denied_groups AS denied_groups \ FROM employee
- 基本漸進式週遊查詢:
db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, last_update_time \ FROM employee \ WHERE last_update_time > ?
- 漸進式週遊查詢會套用具有別名的個別 ACL:
db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, last_update_time, \ permitted_readers AS readers_users, \ denied_readers AS denied_users, \ permitted_groups AS readers_groups, \ denied_groups AS denied_groups \ FROM employee \ WHERE last_update_time > ?
- 使用資料庫時間戳記,而非目前時間的漸進式週遊查詢:
db.incrementalUpdateSql = SELECT customer_id, first_name, last_name, employee_id, interesting_field, \ last_update_time AS timestamp_column \ FROM employee \ WHERE last_update_time > ?
資料欄定義參數
下列參數會指定您在周遊陳述式中使用的欄,以及 明確識別每筆記錄。
設定 | 參數 |
---|---|
所有欄 | db.allColumns = column-1, column-2, ...column-N
必要欄位。識別所有資料欄 您存取資料庫時所需的 SQL 查詢所需資源資料欄 必須以這個參數在查詢中明確參照。每次 系統會將其他資料欄定義參數與這組資料欄進行比較。 範例: db.allColumns = customer_id, first_name, last_name, phone, change_timestamp |
不重複的鍵欄 | db.uniqueKeyColumns = column-1[, column-2]
必要欄位。清單 單一資料庫資料欄,且該資料欄包含不重複的值或 這些資料欄中的值會共同定義專屬 ID。 Cloud Search 要求所有可搜尋的文件都必須具備專屬 ID 同一個資料來源您必須為每筆資料庫記錄定義專屬 ID 。如果您在不同的資料庫上執行多個連接器, 編入通用資料集索引,請務必指定不重複的 ID 範圍涵蓋所有文件。 範例: db.uniqueKeyColumns = customer_id # or db.uniqueKeyColumns = last_name, first_name |
網址連結欄 | url.columns = column-1[, column-2]
必要欄位。指定一或多個已定義的有效值 可供點擊的搜尋結果所使用的網址欄名稱。 如果資料庫沒有與每筆資料庫記錄連結的相關網址,則 靜態連結則可用於每筆記錄。 不過,如果資料欄值確實為每筆記錄定義了有效的連結,則檢視畫面 應指定網址欄和格式設定值。 |
網址格式 | url.format = https://www.example.com/{0}
定義檢視網址的格式。加上編號的參數是指 db.columns (從 0 開始依序對應)。 如未指定,則預設值為「{0}.」。 請參考下表的範例。 |
網址百分比編碼欄 | url.columnsToEscape = column-1[, column-2]
指定 db.columns 中要進行百分比編碼的資料欄 ,然後將值加入格式化網址字串中。 |
網址欄範例
如何指定遍歷查詢中使用的欄以及檢視網址的格式:
- 如何使用未使用任何資料庫記錄值的靜態網址:
url.format = https://www.example.com
- 如何使用檢視網址的單一資料欄值:
url.format = {0} url.columns = customer_id
- 如何使用在 {0} 位置替代檢視網址的單一欄值:
url.format = https://www.example.com/customer/id={0} url.columns = customer_id url.columnsToEscape = customer_id
- 如要使用多個資料欄值建立檢視網址 (欄依順序排列):
url.format = {1}/customer={0} url.columns = customer_id, linked_url url.columnsToEscape = customer_id
內容欄位
使用內容選項定義哪些記錄值 都屬於可搜尋內容的一部分。
設定 | 參數 |
---|---|
關鍵字品質最高的搜尋資料欄 | contentTemplate.db.title = column-name
必要欄位。用於搜尋索引和結果優先順序的最高品質欄。 |
搜尋的資料欄優先順序 | contentTemplate.db.quality.high = column-1[, column-2...] contentTemplate.db.quality.medium = column-1[, column-2...] contentTemplate.db.quality.low = column-1[, column-2...]
指定內容欄 ( |
內容資料欄 | db.contentColumns = column-1[, column-2...]
指定資料庫中的內容欄。這些資料的格式和 上傳至 Cloud Search 做為可搜尋的文件內容。 如未指定值,預設值為「*」。表示所有 欄,請使用這兩欄的內容。 |
Blob 資料欄 | db.blobColumn = column-name
指定單一 blob 的名稱 資料欄,用於文件內容,而非內容欄的組合。 如果指定 blob 資料欄,則如果指定內容欄,就會視為錯誤 也可以定義兩者。不過,中繼資料和結構化資料欄的定義 與 blob 資料欄一起仍允許 |