本文介紹如何快速搭建支援線上多表join功能的執行個體。
前提條件
操作步驟
-
建立併購買應用。
-
配置應用:定義應用結構->定義索引結構->配置資料來源->建立成功。
-
搜尋測試。
建立應用
-
在OpenSearch-高效能檢索版实例管理頁,單擊创建实例。
-
選擇執行個體類型,包括商品版本、商品類型、地區和可用性區域、應用程式名稱、叢集偏好、儲存容量、計算資源,單擊立即购买:
可選的商品版本包括行業演算法版、LLM智能問答版、高效能檢索版、向量檢索版和召回引擎版。
商品版本選擇高性能检索版。
應用程式名稱由英文字母開頭,由數字、英文字母或底線組成,長度不超過30個字元,建立後無法修改。資源群組按需選擇或建立。
-
商品類型可選:包月包年或按量付费。
-
地區和可用性區域:使用者按需選擇。
-
應用程式名稱:可自訂。
-
叢集偏好:獨享儲存型 (固定)。
-
儲存容量和計算資源保持預設,或按需購買。
-
-
確認訂單,勾選服務合約後,單擊立即开通。
-
開通完成後,可以在控制台列表頁,查看待配置狀態的執行個體:
執行個體付費類型顯示為隨用隨付,單擊操作列的配置可進行應用配置。
配置應用
-
在控制台列表頁,找到新購的執行個體,在右側操作欄中單擊配置:
此時新購執行個體的狀態顯示為待配置。
-
定義應用結構:目前提供了 4 種方式的應用結構建立方式。
-
通過模板建立應用結構,使用者可以將自己定義的應用結構建立成模板,可以通過已有模板快速建立出一個新的應用。
-
通過上傳文檔建立應用結構,使用者可以上傳已有的資料檔案(僅支援JSON格式),系統會自動解析並建立出初始的應用結構(注意欄位類型等需要重新定義)。
-
通過資料來源建立應用結構,適用於RDS、MaxCompute等資料來源同步情境。此功能可快速從源表結構產生初始應用結構,減少手動構造工作量並降低出錯機率。具體詳見資料來源配置。
-
通過手動建立應用結構,快速測試接入時使用,這裡以該方式為例,建立2張表:
第一張表名為 main,包含欄位
m_id(INT,主鍵)、m_name(LITERAL)、m_age(LITERAL)、m_titile(TEXT)。第二張表名為 table_1,包含欄位t_id_1(INT,主鍵)、t_name(LITERAL)、t_age(LITERAL)、t_title(TEXT)。欄位類型的選擇可以參考OpenSearch-高效能檢索版表結構。
注意:
說明表總數不能超過系統最大限制8個。
-
-
索引結構配置,不同的表需要單獨配置:(每張表都需要單獨配置)
索引結構配置頁麵包含以下地區:索引欄位列表(配置索引名稱、包含欄位及分析方式)、屬性欄位列表、分欄欄位列表(選填)和進階配置(選填)。多張表(如 main 表和 table_1 表)需分別展開單獨配置。
說明-
FLOAT,FLOAT_ARRAY,DOUBLE,DOUBLE_ARRAY 不支援設定索引欄位。
-
TEXT,SHORT_TEXT 不支援設定屬性欄位。
-
-
在各表設定(如 areas 表設定 和 test 表設定)中,展開分欄欄位列表(選填)地區,在包含欄位列中添加分欄欄位。
OpenSearch執行個體,後端是分布式的部署,在多表情境下,需要多個表join的資料在同一台機器上,如下圖:
引擎在build索引時根據使用者配置的分列進行hash,將hash結果相同的記錄存放在同一列。查詢時,查詢節點向各列發起請求,各列根據使用者的SQL進行內部join操作,不進行跨列join。最終,每列將join結果返回給查詢節點,查詢節點匯總後將結果返回給使用者。
說明-
系統預設已採用主鍵分列;
-
只能選擇一個欄位為分欄欄位;
-
分欄欄位需要保證全域值唯一;
-
分欄欄位支援的類型有:INT、LITERAL;
-
如需非主鍵join,必須在分列鍵中配置需要join的欄位;
-
-
資料來源配置,可根據高效能檢索版支援的資料來源類型進行配置:
頁面中會展示 main 和 table_1 兩個資料來源區域,需要分別單擊對應地區下方的 添加資料來源 進行配置。
單擊添加資料來源,配置對應的資料來源:
-
配置完成後,單擊完成:
單擊完成後,頁面跳轉至執行個體詳情頁。
-
在執行個體詳情頁中,等待線下應用狀態為正常後,即可進行查詢:
此時線下應用狀態顯示為應用初始化中。
搜尋測試
-
線下應用狀態正常,並切換上線後,可在搜尋測試頁進行搜尋測試:
在左側導覽列選擇功能擴充 > 搜尋測試,或在執行個體列表的操作列中單擊搜尋測試進入搜尋測試頁面。
-
目前多表線上join方式,僅支援SQL查詢:
在SQL查詢輸入框中輸入多表JOIN語句,例如
SELECT ... FROM auction_table INNER JOIN trade_table ON auction_table.id = trade_table.auction_id WHERE contain(auction_table.user_id, ?) ORDER BY ... LIMIT 20 OFFSET 0,通過dynamic_params=123,456傳入查詢參數,單擊執行後下方展示查詢結果。詳細的SQL文法可參考SQL支援。